PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : استفاده از dll های C++ و ویندوز در c#



esisafa
09-09-2013, 15:02
سلام دوستان
مدتی بود میگفتم چطور کتابخونه هایی مثل LibusbDotNet.dll که در واقع کلاسی برای دات نت هستن با libusb و درایورهای ویندوز ارتباط برقرار میکنه. اگر در قسمت add refrence بخوایم یک درایور اضافه کنیم با خطا مواجه میشیم.
در اینجا یک قسمت از نمونه کد قرار میدم تا با اصول اولیه ی این کار آشنا بشیم و فعلا خودم بیشتر از اینم نمیدونم.


//************************************************** ************************
//
// FUNCTION IMPORTS FROM FTCJTAG DLL
//
//************************************************** ************************

[DllImport("ftcjtag.dll", EntryPoint = "JTAG_GetDllVersion", CallingConvention = CallingConvention.Cdecl)]
static extern uint GetDllVersion(byte[] pDllVersion, uint buufferSize);

[DllImport("ftcjtag.dll", CallingConvention=CallingConvention.Cdecl)]
static extern uint JTAG_GetErrorCodeString(string language, uint statusCode, byte[] pErrorMessage, uint bufferSize);

[DllImport("ftcjtag.dll", CallingConvention=CallingConvention.Cdecl)]
static extern uint JTAG_GetNumHiSpeedDevices(ref uint NumHiSpeedDevices);

[DllImport("ftcjtag.dll", CallingConvention=CallingConvention.Cdecl)]
static extern uint JTAG_GetHiSpeedDeviceNameLocIDChannel(uint deviceNameIndex, byte[] pDeviceName, uint deviceNameBufferSize, ref uint locationID, byte[] pChannel, uint channelBufferSize, ref uint hiSpeedDeviceType);

همین طوری که میبینید توابع dll در C# به این صورت اعلام اولیه میشن. این dll برای کار کردن با jtag ایسی ft2232 هست.
اگر کسی اطلاعات داره لطفا قضیه رو روشن کنه.

esisafa
09-09-2013, 18:01
هنوز کسی نظری نداره
برای شروع کار باید این کتابخونه رو اضافه کنید

using System.Runtime.InteropServices;
بعد فایل FTCJTAG.dll رو به پروژه اضافه کنید
بعدش که کد

[DllImport("FTCJTAG.dll", EntryPoint = "JTAG_GetDllVersion", CallingConvention = CallingConvention.Cdecl)]
static extern uint GetDllVersion(byte[] pDllVersion,uint buufferSize);
به فورم بالای سازنده اضافه کردم هیچ خطایی نگرفته

sadmonew
09-09-2013, 18:30
سلام مهندس
بله روش اضافه كردن و استفاده از dll تو #C همينه.
حالا مشكل دقيقا" چيه؟ نحوه استفاده از توابع براي كار با آيسي Ft2232؟ يا .....؟

esisafa
09-09-2013, 20:48
مشکل این بوده که من نمیدونستم، حالا که دارم روش کار میکنم قدم به قدم اینجا هم قرار میدم. اگر کسی در این مورد اطلاعات داره لطفا توضیح بده که مثلا entry point چیه و بقیه چی هستن و در کل موارد لازم برای این کار گفته بشه

مثلا الان این کدها رو اضافه کردم

private void button1_Click(object sender, EventArgs e)
{
uint ftStatus = 0;
byte[] byteDllVersion = new byte[10];
string DllVersion;

ftStatus = GetDllVersion(byteDllVersion, 10);

DllVersion = Encoding.ASCII.GetString(byteDllVersion);
DllVersion = DllVersion.Substring(0, DllVersion.IndexOf("\0"));
label1.Text = DllVersion;
}حالا با زدن دکمه عدذ 1.9 که ورژن dll هست نمایش داده میشه.
در ضمن فایل ftcjtag.dll باید در محل فایل اجرایی برنامه یعنی پوشه ی debug قرار بگیره و به پروژه اضافه بشه نه در قسمتی که فایلهای پروژه مثل form هست

behnam6500
10-09-2013, 00:28
این روش اضافه کردن dll برای api ها هست!

dll های com مثل dll های دات نت از طریق رفرنس اضافه میشن

esisafa
10-09-2013, 02:05
این روش اضافه کردن dll برای api ها هست!

dll های com مثل dll های دات نت از طریق رفرنس اضافه میشن

ممنون میشه بیشتر توضیح بدین.
dll های دات نت که میدونم چیه و از رفرنس اضافه میشه. dll های com چی هستن؟
الان بخوایم از همین ftcjtag.dll یا D2xx همین شرکت ftdi استفاده کنیم باید به همین روش بالا عمل کنیم یا راه دیگه ای هم هست؟

behnam6500
10-09-2013, 10:25
com ها dll هایی هستن که با فریم وورک دات نت نوشته نشدن!
که از طریق reference اضافه میشن
این dll ای که اینجا بحث شده از این طریق داره اضافه میشه یه تست بزن ببین با رفرنس هم اضافه میشه یا نه؟
اگه میتونی اینجا بزارش یه نگاهی بهش بندازم.
dll های com بر خلاف دات نتیا برای استفاده باید رجیستر بشن توی سیستم!

esisafa
10-09-2013, 11:28
با رفرنس اضافه نشد. اسمش در قسمت com نبود با browse هم خطا میگرفت.
منظور شما از رجیستر شدن همین روش برنامه نویسی هست دیگه؟

esisafa
10-09-2013, 15:12
الان گشتم دیدم کتابخونه ی ftd2xx_net.dll هم برای دات نت تشریف دارن.