PDA

View Full Version : مشکل vs C++.Net با dll های قدیمی



ara_prg
سه شنبه 18 اسفند 1383, 17:15 عصر
کی میدونه چطور میشه از طریق یک برنامه Managed c++.net با یک dll معمولی ارتباط برقرار کرد. البته در ارسال پارامتر های string مشکل دارم. چون در managed c نوع sting با string های قبلی فرق می کند.


:گیج:

Inprise
سه شنبه 18 اسفند 1383, 18:15 عصر
نمونه کدی که مشکل داره رو باید ضمیمه کنی .

ara_prg
یک شنبه 23 اسفند 1383, 20:23 عصر
typedef LPTSTR (*GetSProp)(LPTSTR);
.
.
.


void mySysGetSProp(String* SNo)
{
GetSProp myGetSProp;
HINSTANCE hinstLib;
.
.
.
hinstLib = LoadLibrary("Mnd.dll");
if (hinstLib != NULL)
{
myGetSProp = (GetSProp) GetProcAddress(hinstLib, "GetSProp");
if (NULL != GetStdSelectedUnits)
{
fRunTimeLinkSuccess = TRUE;
String* TmpStr = (GetSProp) (SNo);
}
fFreeResult = FreeLibrary(hinstLib);
}
.
.
.
}


خوب همانطور که می بینید در کد من یک تابع از یک dll را صدا می کنم. این تابع یک پارامتر string را دریافت و یک مقدار string با می گرداند. تابع فوق با vc++ چک شده و درست عمل می کند اما در managed c در ارسال پارامتر به تابع خطا می گیرد که یک مقدار managed string را نمی توان به تابع فوق ارسال کرد.


با تشکر از توجه شما :گیج:

Inprise
دوشنبه 24 اسفند 1383, 00:08 صبح
طبیعیه . رشته های دات نت از جنس LPTSTR نیستند . قابلیت مارشالینگ دات نت برای رفع همین مشکل در نظر گرفته شده . باید رشتهء دات نت رو MarshalAs رشتهء غیر دات نتی مورد نظرت ، بعد ارسالش کنی . اگر msdn مشکلت رو حل نکرد بگو .

ara_prg
دوشنبه 24 اسفند 1383, 08:16 صبح
خیلی ممنون از توجه شما . لطفا با یک مثال نشان دهید چون من زیاد متوجه نشدم که چکار باید بکنم.


:flower: :تشویق:

ara_prg
چهارشنبه 10 فروردین 1384, 12:32 عصر
جناب Inprise اگر لطف کنید و بیشتر توضیح دهید ممنون می شوم :flower:

Inprise
چهارشنبه 10 فروردین 1384, 21:31 عصر
توضیحم کامل و واضح بود ؛ انتظار نداشته باش Managed C رو آموزش بدم . اگر نمیدونی چطور از Marshaling استفاده کنی به منبع آموزشی ات مراجعه کن . ( معمولا" در مراجع تو بخش مربوط به Unmanaged and Managed misc میتونی مارشالینگ رو پیدا کنی )