Вызов обернутого C ++ DLL-метода из C #: передача адресов целочисленных переменных для получения вывода - PullRequest
0 голосов
/ 05 ноября 2010

Мне нужно вызвать упакованную функцию из C ++ DLL со следующим объявлением:

[DllImport(@dllPath, EntryPoint = "Calling_fooBar")]
private static extern int Calling_fooBar( uint*   a,
                                          uint*   b,
                                          uint*   c,
                                          uint*   d,
                                              //etc );

Используется таким образом:

private void getData()
{
    uint A, B, C, D; //etc
    Calling_fooBar( &A, &B, &C, &D );

    // ...
}

После этого все A, B, C, D по-прежнему равны 0. Я вполне уверен, что внешний метод в DLL работает правильно, поэтому они должны иметь ненулевые значения. Так что я предполагаю, что неправильно передаю адрес ... или что-то в этом роде.

Надеюсь, это не слишком глупый вопрос. Я могу уточнить все, что нужно

Ответы [ 2 ]

3 голосов
/ 06 ноября 2010

Попробуйте изменить * и & на ref.

2 голосов
/ 06 ноября 2010

Да, Слакс выше. Вот как выглядит мой код, который успешно делает такие вещи:

[DllImport("blah.dll")]
private static extern int thingy( ref uint refArg );
/* ... later in the code. ...*/
int retVal = thingy( ref refVariable );
...