P / Invoke из C #: вызов функций возвращаемого объекта. - PullRequest
2 голосов
/ 20 марта 2012

У меня есть собственная / неуправляемая DLL, и она имеет функцию «CreateObject», которая возвращает указатель на бизнес-объект .. поэтому вызов будет sth. как:

[DllImport("MyDll.dll", CharSet = CharSet.Auto)]
private static extern IntPtr CreateObject();

Вопрос: Объект предоставляет публичные функции, такие как «Connect ()», которые я хочу вызвать, но я не знаю, как «отобразить» эти вызовы, поэтому у меня есть простая сигнатура метода, такая как:

private bool Connect();

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 20 марта 2012

Способ сделать это - предоставить другую функцию PInvoke, которая вызывает функцию C, которая вызывает метод

[DllImport("MyDll.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.I1)]
private static extern bool Connect(IntPtr businessObject);

Затем в C вы определяете следующее

extern "C" {
  bool Connect(Business* pObject) {
    return pObject->Connect();
  }
}
0 голосов
/ 20 марта 2012

Вы должны обернуть объекты C ++ в свободные функции:

bool Connect(MyObject* obj)
{
    return obj->Connect();
}

и затем экспортируйте их из вашей DLL.

В качестве альтернативы вы можете использовать тот факт, что вы компилируете с C ++ / CLI и экспортируете управляемый класс C ++ / CLI, который может использоваться непосредственно вашим кодом C #.

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