PDA

View Full Version : dynamic C++ dll load in C#



silentrise
دوشنبه 15 بهمن 1386, 21:54 عصر
سلام
راستش گشتم ولی . ظاهرا مشکلم چیز دیگست !
من یک DLL را می خوام تو برنامم استفاده کنم ولی .... اینو اصلا نمی تونم AddToRefrence کنم
ٍاین پیغام رو میده
A reference to 'C:\Documents and Settings\Spring\Desktop\@card pardaz\cardpardz.dll' could not be added. Please
make sure that the file is accessible, and that it is a valid assembly or COM component.
از شما میخوام بزرگواری کنید و این DLL رو تست وچگونگی استفاده ان رو توضیح دهید.
من پرس و جو کردم به من گفتن باید DynamicLoad کنم ولی چه جوریش و نگفتن.
با سپاس از همه.

MH2538
سه شنبه 16 بهمن 1386, 08:54 صبح
[DllImport("YourDLLName.dll", EntryPoint = "YourEntryPointName",
SetLastError = true,
CallingConvention = CallingConvention.StdCall)]
private static extern bool YourFunctionName(IntPtr hWnd, int nCmdShow);

silentrise
سه شنبه 16 بهمن 1386, 09:01 صبح
سلام
با تشکر از جوابتون ولی من هیچی نمی فهمم دوست عزیز .لطف میکنی یک توضیح یا مثال قابل فهم بزنی!
باسپاس

silentrise
سه شنبه 16 بهمن 1386, 23:53 عصر
جالب واسم کسی نظری نداره !
یا من سوالم رو بد پرسیدم . یک لطفی کنید بگید شما میتونید این DLL رو Add کنید یا نه ؟
تا حالا پنج نفر این فایل رو برداشتن ولی کم لطفی کردن هنوز نگفن که اصلا Add میشه!؟

silentrise
چهارشنبه 17 بهمن 1386, 21:39 عصر
نمیدونم .........
باید سوال کلیشه ای بپرسم تا جواب بگیرم؟
اگر هم جوابی نداره .خیالم رو راحت کنید!

رضا عربلو
چهارشنبه 17 بهمن 1386, 23:19 عصر
دوست عزیز جواب شما در پست 2 داده شده است. لازم نیست که این dll را به reference های پروژه تان اضافه کنید. بلکه شما با استفاده از اتریبیوت DllImport می توانید توابع ای که در dll تان قرار دارد را به برنامه تان معرفی و از آنها در کدتان استفاده کنید.

silentrise
چهارشنبه 17 بهمن 1386, 23:26 عصر
خب دوست عزیز به نظر شما اگه این موضوع رو می دونستم اینجا می گفتم !؟
من نمی دونم دوستان بزرگوار ظاهرا تایپ کردن سختشون...
اگر نمی خواین کمک کنید ذهن ادم و درگیر نکنید!
باسپاس

silentrise
پنج شنبه 18 بهمن 1386, 04:58 صبح
من فکر کنم کسانی که از API استفاذه کردن بدونن من جی میخوام. چون تو این لینک . API با این قضیعه رابطه مستقیم داره!

http://www.c-sharpcorner.com/UploadFile/amungale/CSandAPIAM12062005073907AM/CSandAPIAM.aspx

Nima_NF
جمعه 19 بهمن 1386, 00:43 صبح
اگر dll شما unmanaged هست:
کد زیر به عنوان نمونه user32.dll را لود می کند ، سپس باید نام تابع مورد استفاده خود را با آرگومان های آن تعریف کنید که در اینجا تابعی با نام MessageBox هست و سپس می توانید از آن استفاده کنید. (dll هم یا باید در فولدر system32 باشد و یا در فولدر فایل اجرایی)



using System;
using System.Runtime.InteropServices;

class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr hWnd, String text,
String caption, uint type);

static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}


البته اگر از dll های خود ویندوز هست ، برای توابع callback فرق می کند:
Edit: برای سایر موارد لینک های این صفحه را ببینید. (http://msdn2.microsoft.com/en-us/library/26thfadc.aspx)

silentrise
جمعه 19 بهمن 1386, 01:17 صبح
باسپاس فراوان از توجه شما به من تازه کار
ظاهرا dll من unmanaged است من رو این موضوع که شما گفتید کار می کنم اگر به مشکلی خوردم مزاحم شما میشم!
راستی لینکی که لطف کردین . مشکل داره !!!
سپاس

silentrise
جمعه 19 بهمن 1386, 02:10 صبح
نمیدونم تو همین تاپیک می تونم بپرسم یا نه !؟

از کجا باید فهمید dll در دست unmanaged است؟
تعریف مناسبی برای کد unmanaged می تونین به من بگین؟!
باسپاس

رضا عربلو
جمعه 19 بهمن 1386, 02:45 صبح
کدی که برطبق ظوابط دات نت نوشته شده باشد و متعاقب آن هنگام کامپایل به CIL ترجمه می شود و توسط CLR اجرا می شود را Managed Code می نامند.
کدی برطبق ضوابط دات نت نوشته نشده باشد یک کد unmanaged است. بدین معنی که این کد هنگام کامپایل مستقیماً به زبان ماشین ترجمه میشود (و نه به CIL) و مستقیماً بدون واسطه (بدون نیاز به CLR) توسط سیستم عامل اجرا می گردد.

Nima_NF
جمعه 19 بهمن 1386, 12:38 عصر
لینک را همان پست ویرایش کردم ، می توانید از آن استفاده کنید.
مثلا برای مواقعی که نیاز به struct و یا کلاس خاصی برای استفاده از تابعی هست ، باید به طور دستی آن ها را بسازید که در آن لینک توضیحات داده شده است.

موفق باشید