У меня есть этот api сканер panini (написанный на c ++, я полагаю), который я хочу вызвать из приложения c#. PS: У меня нет реализации этой DLL, только заголовок и файл DLL. объявление функции из файла VApiInterface.h:
typedef DWORD ERR_CODE;
typedef ERR_CODE VAPI_RET_TYPE;
typedef struct _DeviceListStruct
{
DWORD DeviceType;
char DeviceSerialNumber[MVX_SN_SIZE];
DWORD DeviceID;
DWORD InternalDeviceID;
BOOL Connected;
}DEVICELISTSTRUCT,* PDEVICELISTSTRUCT;
// Tag for VISION API function declaration
#define VISION_API_DECL __declspec(dllexport)
// VISION API function tag
#define VISION_API WINAPI
VISION_API_DECL VAPI_RET_TYPE VISION_API VApiGetDeviceList(PDEVICELISTSTRUCT pDevList, DWORD Length, DWORD *DetectedDevices);
, и я пытаюсь вызвать эту функцию из c# следующим образом
public class VisionAPI
{
[StructLayout(LayoutKind.Sequential)]
public struct _DeviceListStruct
{
public uint DeviceType;
[MarshalAs(UnmanagedType.LPStr, SizeConst = 11)]
public string DeviceSerialNumber;
public uint DeviceID;
public uint InternalDeviceID;
public bool Connected;
}
[DllImport("VisionAPI.dll", EntryPoint = "VApiGetDeviceList")]
public static extern uint VApiGetDeviceList(ref _DeviceListStruct d,uint len,ref uint devices);
}
////////////
//the call
VisionAPI._DeviceListStruct d = new VisionAPI._DeviceListStruct() ;
VisionAPI.VApiGetDeviceList(ref d, 0, 0);
, и я получаю эту ошибку
Unable to find an entry point named 'VApiGetDeviceList' in DLL 'VisionAPI.dll'.
как бэкэнд-разработчик java Я действительно не в себе, и у меня нет абсолютно никакой идеи, что я делаю неправильно. Пожалуйста, помогите.