Вызов собственной dll-функции из программы c # wpf

#c# #c #c #wpf #dll

#c# #c #c #wpf #dll

Вопрос:

Вот мой вопрос..

Я создал консольное приложение на языке c для чтения и записи NFC-карты. Там есть 2 функции для чтения и записи.

 long ReadCard(char * cID)
{
// code here 
}

long WriteCard(char * cID)
{
// code here
}
  

для вызова этой функции я использовал этот код..

для считывания карты..

 char * cID = malloc(17 * sizeof(char));
long _ret = ReadCard(cID);
  

для карты записи..

 char CID[17];
printf("Enter Card ID n");
scanf("%s", CID);
long _ret = WriteCard(CID);
  

это отлично работает…

затем я создал dll, используя вышеупомянутое консольное приложение, и попытался использовать его в приложении c #..

В коде c # сначала я импортирую dll и функцию, объявленные следующим образом..

 [DllImport("NFC_Driver_DLL.dll", CallingConvention =   CallingConvention.Cdecl)]
public static extern int ReadCard([Out] char[] cID);

[DllImport("NFC_Driver_DLL.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int WriteCard([In] char[] cID);
  

после этого, чтобы прочитать card, я использовал этот код..

 char[] CardID = new char[17];
int a = ReadCard(CardID);
string s = new string(CardID);
MessageBox.Show(s);
  

это полностью протестировано и работает на 100%..

но я не знаю, как вызвать функцию записи карты со стороны c #..

я попробовал этот код…

 char[] CardID = new char[17] ;
int a = WriteCard(CardID);
  

при выполнении этого кода возникает исключение, которое сообщает это сообщение..

Необработанное исключение типа ‘System.EntryPointNotFoundException’ произошел в WpfNFCTest.exe

Дополнительная информация: не удалось найти точку входа с именем ‘WriteCard’ в DLL ‘NFC_Driver_DLL.dll «.

пожалуйста, помогите мне вызвать эту функцию записи, пожалуйста…

Комментарии:

1. Попробуйте обернуть объявления функций c с помощью: extern «C» { }

2. не могли бы вы объяснить подробнее??

3. Объявляйте функции c следующим образом: extern «C» { длинная карточка чтения (char * cID); длинная карточка записи (char * cID); } . Это следует делать, только если определено __cplusplus . Поскольку имена функций cpp экспортируются по-разному, ваше приложение c # не может найти точку входа.

4. но .. это полностью библиотека c … здесь нет файла cpp

5. Попробуйте использовать средство управления зависимостями в своей библиотеке, чтобы проверить, как экспортируются имена ваших функций. dependencywalker.com . Просто перетащите в нее свою dll.