کی میدونه چطور میشه از طریق یک برنامه Managed C++.net با یک dll معمولی ارتباط برقرار کرد. البته در ارسال پارامتر های string مشکل دارم. چون در managed c نوع sting با string های قبلی فرق می کند.
کی میدونه چطور میشه از طریق یک برنامه Managed C++.net با یک dll معمولی ارتباط برقرار کرد. البته در ارسال پارامتر های string مشکل دارم. چون در managed c نوع sting با string های قبلی فرق می کند.
نمونه کدی که مشکل داره رو باید ضمیمه کنی .
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
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 را نمی توان به تابع فوق ارسال کرد.
با تشکر از توجه شما
طبیعیه . رشته های دات نت از جنس LPTSTR نیستند . قابلیت مارشالینگ دات نت برای رفع همین مشکل در نظر گرفته شده . باید رشتهء دات نت رو MarshalAs رشتهء غیر دات نتی مورد نظرت ، بعد ارسالش کنی . اگر msdn مشکلت رو حل نکرد بگو .
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
خیلی ممنون از توجه شما . لطفا با یک مثال نشان دهید چون من زیاد متوجه نشدم که چکار باید بکنم.
:flower:
جناب Inprise اگر لطف کنید و بیشتر توضیح دهید ممنون می شوم :flower:
توضیحم کامل و واضح بود ؛ انتظار نداشته باش Managed C رو آموزش بدم . اگر نمیدونی چطور از Marshaling استفاده کنی به منبع آموزشی ات مراجعه کن . ( معمولا" در مراجع تو بخش مربوط به Unmanaged and Managed misc میتونی مارشالینگ رو پیدا کنی )
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie