Как импортировать функцию из c ++ .dll в c sharp - PullRequest
1 голос
/ 01 июня 2011

В C ++ у меня есть эта функция, и я использовал ее, как показано ниже. Как мне нужно кодировать с диезом?

birdRS232WakeUp(int nGroupID, BOOL bStandAlone, int nNumDevices,
WORD *pwComport, DWORD dwBaudRate, DWORD dwReadTimeout,DWORD dwWriteTimeout,int nGroupMode       
= GMS_GROUP_MODE_ALWAYS);

в руководстве указано, что «pwComport» указывает на массив слов, каждое из которых является номером компорта, привязанного к одной из птиц (например, COM1 = 1, COM2 = 2 и т. Д.)

WORD COM_port[5] = {0,15,0,0,0}

if ((!birdRS232WakeUp(GROUP_ID,
    FALSE, // Not stand-alone
    DEVCOUNT, // Number of Devices
    COM_port, // COM Port
    BAUD_RATE, // BAUD
    READ_TIMEOUT,WRITE_TIMEOUT, // Reponses timeouts
    GMS_GROUP_MODE_ALWAYS))) 
{
    printf("Can't Wake Up Flock!\n");
    Sleep(3000);
    exit(-1);
}

Вот как я делаю это с диезом.

[DllImport(@"Bird.dll", CallingConvention = CallingConvention.Cdecl)]
public  static extern bool birdRS232WakeUp(int nGroupID, Boolean  bStandAlone, int      
nNumDevices,ref ushort pwComport, uint dwBaudRate, uint dwReadTimeout, uint   
dwWriteTimeout);

 ushort[] COM_port = new ushort[5]{0,13,0,0,0};

        if ((!birdRS232WakeUp(GROUP_ID, false, DEVCOUNT,ref  COM_port, BAUD_RATE, READ_TIMEOUT, WRITE_TIMEOUT)))
        {
            LWakeUpStatus.Text = "Failde to wake up FOB";

        }

И наконец, я получил это сообщение об ошибке «Ошибка 2, аргумент« 4 »: невозможно преобразовать из« ref ushort [] »в« ref ushort »»

Кто-нибудь имеет какое-либо представление об этом?

1 Ответ

1 голос
/ 01 июня 2011

Непосредственная проблема заключается в том, что вы передаете массив типа ushort, когда текущее определение управляемого внешнего источника ожидает только одно значение ushort:

То есть:

ushort pwComport

Должно быть:

ushort[] pwComport
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...