نمایش نتایج 1 تا 7 از 7

نام تاپیک: مشکل vs C++‎.Net با dll های قدیمی

  1. #1

    مشکل vs C++‎.Net با dll های قدیمی

    کی میدونه چطور میشه از طریق یک برنامه Managed C++‎.net با یک dll معمولی ارتباط برقرار کرد. البته در ارسال پارامتر های string مشکل دارم. چون در managed c نوع sting با string های قبلی فرق می کند.



  2. #2
    نمونه کدی که مشکل داره رو باید ضمیمه کنی .
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  3. #3

    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 را نمی توان به تابع فوق ارسال کرد.


    با تشکر از توجه شما

  4. #4
    طبیعیه . رشته های دات نت از جنس LPTSTR نیستند . قابلیت مارشالینگ دات نت برای رفع همین مشکل در نظر گرفته شده . باید رشتهء دات نت رو MarshalAs رشتهء غیر دات نتی مورد نظرت ، بعد ارسالش کنی . اگر msdn مشکلت رو حل نکرد بگو .
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  5. #5
    خیلی ممنون از توجه شما . لطفا با یک مثال نشان دهید چون من زیاد متوجه نشدم که چکار باید بکنم.


    :flower:

  6. #6
    جناب Inprise اگر لطف کنید و بیشتر توضیح دهید ممنون می شوم :flower:

  7. #7
    توضیحم کامل و واضح بود ؛ انتظار نداشته باش Managed C رو آموزش بدم . اگر نمیدونی چطور از Marshaling استفاده کنی به منبع آموزشی ات مراجعه کن . ( معمولا" در مراجع تو بخش مربوط به Unmanaged and Managed misc میتونی مارشالینگ رو پیدا کنی )
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •