DllImport ссылки
Подскажите, не могу разобраться с подключеним сторонней библиотеки. Имеется 2 метода. SPNXREADER_API BOOL SpnxReaderOpen(SPNX_HANDLE *pxHandle); pxHandle - указатель куда будет записана ссылка на устройство
SPNXREADER_API BOOL SpnxReaderReceiveW26(SPNX_HANDLE pxHandle, LPVOID pBuffer, DWORD nBufferSize);
pxHandle - указатель из первого метода. pBuffer - указатель на буфер куда будет записаны полученные данные nBufferSize - Длина буфера.
У меня не получается разобраться со вторым методом, как в него правлиьно передать массисв
[DllImport("spnxreader.dll", CharSet = CharSet.Unicode)]
public static extern Boolean SpnxReaderOpen(Int32* SPNX_HANDLE);
[DllImport("spnxreader.dll", CharSet = CharSet.Unicode)]
public static extern void SpnxReaderClose(Int32* SPNX_HANDLE);
[DllImport("spnxreader.dll", CharSet = CharSet.Unicode)]
public static extern Boolean SpnxReaderReceiveW26(Int32* SPNX_HANDLE, ref String buffer, Int32 nBufferSize);
private void Form1_Load(object sender, EventArgs e)
{
Int32 s;
var t = SpnxReaderOpen(&s);
while (true)
{
byte[] buf = new byte[3];
var xr = SpnxReaderReceiveW26(&s, ref buf , 3);
}
SpnxReaderClose(&s);
}
Получаю ошибку Необработанное исключение типа "System.AccessViolationException" Как пример есть рабочий код на С++. но не могу понять в чем проблема.
int _tmain(int argc, _TCHAR* argv[])
{
SPNX_HANDLE hReader;
unsigned char xKeyBuffer[3];
// Открываем считыватель
if ( SpnxReaderOpen(&hReader) != TRUE )
{
printf( "Unable to open the reader. Device is probably disconnected, disabled or driver is not installed.\n" );
return 0;
}
// Получаем от считывателя коды карт и распечатываем их.
for(;;)
{
if ( SpnxReaderReceiveW26(hReader,xKeyBuffer,sizeof(xKeyBuffer)) != TRUE )
{
// Произошка ошибка. Вероятно, устройство отключили от USB.
printf( "Communication error. Device is probably disconnected.\n" );
return 0;
}
printf( "%03d,%05d\n", (unsigned)(xKeyBuffer[0]), (unsigned)(xKeyBuffer[1])*0x100 + xKeyBuffer[2] );
}
}