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

نام تاپیک: مشکل در استفاده از DLL و تابع دارای پارامتر از نوع String

  1. #1
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379

    مشکل در استفاده از DLL و تابع دارای پارامتر از نوع String

    با سلام.

    من یک DLL در دلفی نوشته‌ام که حاوی یک پارامتر از نوع String است. در هنگام اجرای برنامه از خطی که قرار است تابع فوق را فراخوانی کند این ایراد را میگیرد:
    An unhandled exception of type 'System.NullReferenceException' occurred in Invoke_CS.exe

    Additional information: Object reference not set to an instance of an object.

    این کد نوشته شده در #C است:
    using System;
    using System.Runtime.InteropServices;

    namespace Invoke_CS
    {
    class Class1
    {
    [DllImport("EchoStr.dll")]
    public static extern bool CheckString(string s);
    [STAThread]

    static void Main(string[] args)
    {
    string x="Reza";
    if(CheckString(x)==true)
    {
    Console.WriteLine("True");
    }
    else
    {
    Console.WriteLine("False");
    }

    Console.ReadLine();
    }
    }
    }

    مشکل از چیست؟

  2. #2
    برادر ؛

    به دلیل ویژگیهای خاص String دلفی ، میدونی که اگر قرار باشه یک String از یک DLL اکسپورت بشه باید یونیت ShareMem هم تو DLL و هم در پروژه ، درج شده باشه . یونیت ShareMem در واقع ماژول borlandMM.dll رو محصور میکنه که امکان تبدیل String های دلفی به رشته های نال ترمینیتد ویندوز رو فراهم میکنه . ممکنه بخای با خوندن متن این یونیت یک نسخهء سازگار با دات نت از روش بنویسی ، یا ممکنه بخای تو یه انتخاب بهتر ، String ها رو با Pchar جایگزین کنی و رستگار از دنیا بری ! :wink:

    خوش باشی
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  3. #3
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    سلام.

    از پاسخ‌ات ممنون.

    من قبلا این کارهایی رو که میگی انجام داده‌ام. این صرفا یک تست است که من تو همه زبانهای مبتنی بر Win32 جوابم مقتضی رو ازش گرفتم.
    این رو هم میدونم که مشکل از سمت کد #C است، نه کد نوشته شده در دلفی.

    فقط بدلیل آشنایی کم با #C نمیدونم باید چطوری این مشکل رو رفع کنم. امان از ناشی گری و کم حوصلگی :)

  4. #4
    مثالی از یک دی ال ال ساده در دلفی (به stdcall توجه بفرمایید)

    library prj_1;

    uses
    Dialogs;

    {$R *.res}

    procedure GetNev( s:PChar );stdcall; export;
    begin
    ShowMessage(s) ;
    end;

    exports GetNev;

    begin
    end.



    نحوه ی استفاده از dll فوق در سی شارپ (به تعاریف Calling Convention و Charset نیز توجه بفرمایید ):


    using System.Runtime.InteropServices ;

    [DllImport( "prj_1.dll", CallingConvention = CallingConvention.StdCall , CharSet=CharSet.Ansi)]
    public static extern void GetNev(string s);


    اطلاعات بیشتر
    http://www.thecodeproject.com/csharp/interop.asp
    http://msdn.microsoft.com/msdnmag/is...T/default.aspx

  5. #5
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    درست شد. مرسی++ :kiss: :flower:

  6. #6
    ارادتمند بوده و هستیم :flower:

  7. #7
    این رو هم میدونم که مشکل از سمت کد #C است، نه کد نوشته شده در دلفی.
    راستش فکر میکنم کد سی شارپ مشکلی نداره ! نکته عدم سازگاری انواع است . String یک رشتهء null-Terminated حقیقی نیست ( به مفهوم ویندوزی اش ) و سی شارپ ، یا هر زبان دیگر ، باهاش با مشکل مواجه خواهد شد . اغلب توصیه میکنند توسعه گران دلفی بجای String از همان Pchar استفاده کنند تا عادت به کاربرد آن باعث نقض Reusability ماژولهائی که مینویسند ، در زبانهای دیگر نشه .

    خوش باشی
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  8. #8
    کاربر دائمی آواتار M.GhanaatPisheh
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    ----------
    پست
    1,267
    :oops:

  9. #9
    کاربر دائمی آواتار vesal
    تاریخ عضویت
    اسفند 1383
    محل زندگی
    تهران
    پست
    198
    برای استفاده از DLL ها در تمام زبان ها باید پارامترهای String به صورت آرایه ای از کاراکترها ارائه شوند ::نوشتن::

  10. #10
    Inprise dorostdar mifarmayan ta bagheye

  11. #11

    !!!

    تا اونجایی که من می دونم Marshler به طور خودکار نوع داده System.String را در هنگام مهاجرت از Appdomain مربوط به CLR به فضای آدرس Unmanaged به نوع null-terminated string تبدیل می‌کنه! (مگر مواردی که طول string مشخص باشه، مثل یکی از اعضا ساختاری که به Shell_NotifyIcon فرستاده می‌شه.(اگه درست یادم باشه SHELLNOTIFYINFO بود)

  12. #12

    dll در دلفی

    با سلام و خسته نباشید به همه شما عزیزان بسیار گرانقدر که هدف شما ارتقاء علم جوانان عزیز مان هست
    من یه مثال از ایجاد dll در دلفی میخواستم چون طبق توصیه های کتاب مینویسم ولی جواب نمیده با تشکر

  13. #13
    نقل قول نوشته شده توسط h_bahmany25 مشاهده تاپیک
    با سلام و خسته نباشید به همه شما عزیزان بسیار گرانقدر که هدف شما ارتقاء علم جوانان عزیز مان هست
    من یه مثال از ایجاد dll در دلفی میخواستم چون طبق توصیه های کتاب مینویسم ولی جواب نمیده با تشکر
    سلام
    خوش اومدین
    1 ) بع تاریخ تاپیک یه نگاهی بندازین (البته خیلی مهم نیست این قضیه)
    2 )سوالتون را در بخش دلفی بپرسین

    این که می بینید این تاپیک در بخش سی شاپ و 3 سال پیش ایجاد شده به این دلیل است که نویسنده تاپین می خواسته از dll نوشته شده در دلفی درون سی شارپ استفاده کنه
    اگر مشکل شما هم همینه که بعید می دونم (چون در همین تاپیک جواب داده شده) و اگر هم کلا با نوشتن dll درون دلفی مشکل دارین همانطور که عرض کردم این جا مربوط به سی شارپ است.
    اما یه نکته قابل توجه و تحسین است. اولین بار هست که میبینم یک نفر تازه وارد قبل از اینکه پست بده سرچ کرده.. آفرین برشما دوست عزیز
    موفق باشید

    مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
    مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084


    وب سایت : http://www.mkiani.ir
    پست الکترونیک : mkiani3000@gmail.com

    موفق و پیروز باشید.
    مهدی کیانی


تاپیک های مشابه

  1. شکستن string
    نوشته شده توسط alirzn در بخش C#‎‎
    پاسخ: 9
    آخرین پست: سه شنبه 27 شهریور 1386, 02:20 صبح
  2. تبدیل string به int
    نوشته شده توسط smt_414 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: شنبه 10 شهریور 1386, 15:32 عصر
  3. مشکل با تبدیل String به کاراکتر
    نوشته شده توسط shaghayegh_6113 در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 2
    آخرین پست: شنبه 12 اسفند 1385, 19:19 عصر
  4. وارونه کردن یک string
    نوشته شده توسط setak در بخش VB.NET
    پاسخ: 2
    آخرین پست: سه شنبه 05 دی 1385, 10:36 صبح
  5. [public string this[string key معنی این تابع چیست؟؟؟فوری
    نوشته شده توسط izadi در بخش C#‎‎
    پاسخ: 2
    آخرین پست: دوشنبه 11 آبان 1383, 15:27 عصر

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

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