PDA

View Full Version : سوال: مشکل با اجرای برنامه به علت زبان سیستم ویندوز



nsco_nsco
پنج شنبه 18 فروردین 1390, 18:43 عصر
سلام دوستان
من اومدم برای اینکه بتونم از دی ال ال م در زبان های مختلف استفاده کنم به صورت زیر در دی ال ال عمل کردم :

function a: AnsiString ; stdcall;
همون طور که می بینید AnsiString رو انتخاب کردم و می دونید که باید در صورتی که از زبان فارسی بخواید استفاده کنید باید حتما روی سیستمتون قرار داده شده باشد من زمانی که فایل دی ال ال رو در فایل اگزه فراخوانی می کنم یک سری اطلاعات رو نمایش می دهد من برنامه رو با دلفی 2010 نوشتم و روی همون سیستمی که نوشتم به خوبی جواب می دهد و قشنگ فارسی رو نمایش می دهد البته لازم به ذکر است ویندوز این سیستم سون هست ولی زمانی که اون رو روی اکس پی قرار می دهم پس از باز شدن ارور می دهد و همین طور ارور تکرار می شود و زمانی که زبان سیستم هم فارسی باشد ارور می دهد ولی زبان رو عربی عراقی می زاری نصفیش رو نشون می دهد حالا می خواستم کمک کنید و بگید مشکل کجاست و در صورتی که می توانید یکی دیگه به جای AnsiString به من معرفی کنید که با فارسی مشکل نداشته باشد و لا اقل پس از تنظیم سیستم ازار ندهد و به درستی کار کند البته می خوام در کلیه زبان های دیگر نیز بشود از این دی ال ال استفاده کرد راستی اگر معرفی کردید یک مثال هم بزنید ممنون می شوم سریع پاسخ بدید با تشکر از همه دوستان :قلب:

vcldeveloper
پنج شنبه 18 فروردین 1390, 19:58 عصر
من اومدم برای اینکه بتونم از دی ال ال م در زبان های مختلف استفاده کنم


function a: AnsiString ; stdcall;
این دو تا چیزی که نوشتید، با هم در تضاد هستند؛ اگر هدف زبان های مختلف هست، دیگه AnsiString اون وسط چیکاره هست؟! AnsiString یک نوع داده مخصوص دلفی هست، سایر زبان های برنامه نویسی اون رو نمی شناسند، کما اینکه دلفی هم فرضا std::string در ++C رو نمی شناسه.

قبلا چندین بار توضیح دادم که DLL ایی که بخواد با زبان های برنامه نویسی مختلف استفاده کنه، نباید در رابط برنامه نویسی خودش از نوع های داده اختصاصی استفاده کنه. تاپیک های زیادی در این رابطه موجود هست.

nsco_nsco
جمعه 19 فروردین 1390, 15:40 عصر
سلام ممنون از پاسختون اما حالا می گید از چه نوع متغییر استفاده کنم تا در زبان های مختلف بشود استفاده کرد؟؟؟:قلب:

BORHAN TEC
جمعه 19 فروردین 1390, 18:07 عصر
البته می خوام در کلیه زبان های دیگر نیز بشود از این دی ال ال استفاده کرد
من بعید می دانم که چنین چیزی شدنی باشد. ای کاش زبان های مورد نظر خود را به همراه نسخه آنها ذکر کنید تا چاره ای بیاندیشیم. :متفکر:

a_mosavian
جمعه 19 فروردین 1390, 19:02 عصر
سلام ممنون از پاسختون اما حالا می گید از چه نوع متغییر استفاده کنم تا در زبان های مختلف بشود استفاده کرد؟؟؟:قلب:
PChar و PWideChar

nsco_nsco
جمعه 19 فروردین 1390, 21:17 عصر
سلام ممنون از پاسخهاتون من چون قبلا از AnsiString کردم و از نوع استرینگ بوده ممنون می شوم به جای پی چار و .. چیزی برای استرینگ معرفی کنید البته برای زبان های دیگه هم بشه استفاده کرد با تشکر از همه شما دوستان :قلب:

nsco_nsco
جمعه 19 فروردین 1390, 21:24 عصر
راستی در مورد زبان ها واقیتش می خوام این دی ال ال رو در اختیار دوستان بزارم که استفاده کنن خوب هر کسی هم با زبانی کار می کنه و من می خوام که از این دی ال ال در زبان های مورد نظر خودشون بتونن استفاده کنن :قلب:

vcldeveloper
شنبه 20 فروردین 1390, 00:08 صبح
ممنون می شوم به جای پی چار و .. چیزی برای استرینگ معرفی کنید البته برای زبان های دیگه هم بشه استفاده کرد
حکایت اون طرفی هست که بهش می گفتند این گاو نره، می گفت بدوش! عزیز من، یک ساعت توضیح دادم که ساختارهای اختصاصی یک زبان برای همون زبان هست و سایر زبان ها با اون ساختار آشنا نیستند؛ اون وقت شما میگید راهکار بدیم، که از همون استرینگ در سایر زبان ها استفاده کنید؟!

من درباره استفاده از PChar در DLL برای نقل و انتقال متن، چندین بار توضیح دادم.

nsco_nsco
شنبه 20 فروردین 1390, 01:29 صبح
سلام
یعنی می گید راحی نداره که دی ال الی که نوشتیم بشه برای زبان های دیگه کار کنه ؟؟ منظورتون اینه یا نه اگر نه پس بگید چه کنیم با تشکر :قلب:

vcldeveloper
شنبه 20 فروردین 1390, 18:17 عصر
یعنی می گید راحی نداره که دی ال الی که نوشتیم بشه برای زبان های دیگه کار کنه ؟؟ منظورتون اینه یا نه اگر نه پس بگید چه کنیم

در همون پست اول توضیح دادم:


قبلا چندین بار توضیح دادم که DLL ایی که بخواد با زبان های برنامه نویسی مختلف استفاده کنه، نباید در رابط برنامه نویسی خودش از نوع های داده اختصاصی استفاده کنه.
اگر از نوع های داده اختصاصی در رابط برنامه نویسی DLL استفاده نکنید، می تونید ازش در زبان های برنامه نویسی مختلف استفاده کنید. یکی از اون نوع های داده اختصاصی string هست. به جاش می تونید اشاره گری به اولین کارکتر یک رشته را برگشت بدید، که میشه همون PChar. درباره PChar هم قبلا توضیح دادم. یک نمونه از چگونگی ارسال و دریافت متن با استفاده از PChar در DLL را هم در StackOverflow گذاشتم:

http://stackoverflow.com/questions/2638652/exchanging-strings-pchar-between-a-freepascal-compiled-dll-and-a-delphi-compile/2638917#2638917

احیانا باید مثال های مشابهی رو در همین سایت هم گذاشته باشم.

nsco_nsco
یک شنبه 21 فروردین 1390, 04:38 صبح
سلام
ممنون می شوم بگید با رعایت اینکه متغییر از نوع PChar باشد در زبان های دیگر مثلا ویژوال بیسیک و یا دات نت و .. چطوری باید این دی ال ال را فراخوانی کرد یا بهتر بگم با فراخوانی چه نوع متغییری با تشکر :قلب:

vcldeveloper
یک شنبه 21 فروردین 1390, 23:21 عصر
با رعایت اینکه متغییر از نوع PChar باشد در زبان های دیگر مثلا ویژوال بیسیک و یا دات نت و .. چطوری باید این دی ال ال را فراخوانی کرد یا بهتر بگم با فراخوانی چه نوع متغییری
این رو باید در تالار مربوط به هر کدوم از همون زبان های برنامه نویسی مطرح کنید. اگر اون زبان برنامه نویسی مد نظر شما بتونه با توابع API ویندوز رشته رد و بدل کنه، با PChar هم میتونه، چون توابع API ویندوز از مکانیزم مشابهی برای این کار استفاده می کنند.