C# вызов функции из неуправляемой c ++ dll - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть этот 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 Я действительно не в себе, и у меня нет абсолютно никакой идеи, что я делаю неправильно. Пожалуйста, помогите.

...