#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.