вызов процедуры delphi5 в c # dll - PullRequest
3 голосов
/ 10 марта 2011

У меня большая проблема. У меня есть приложение Delphi5, которое вызывает C # DLL. Я хочу вызвать функцию из моего C # DLL, который нуждается в указателе на процедуру Delphi в качестве входного параметра. В этой функции c # процедура delphi вызывается впоследствии.

Я попытался объявить указатель функции на стороне c #, используя IntPtr:

ourFunction(IntPtr fct){
   ...
   helpFct = (OurType)Marshal.GetDelegateForFunctionPointer(fct, typeof(OurType));
   ...
}

Если я вызываю функцию из c #, все работает нормально. Но если я хочу вызвать его из Delphi (с процедурой delphi в качестве входного параметра), он вылетает, не давая мне никакой информации об ошибке.

вот мой код delphi:

hBuffer : THandle;
buffer : PInteger;
...
hBuffer:=GlobalAlloc(GMEM_fixed,SizeOf(Integer));
buffer:=GlobalLock(hBuffer);
buffer := Addr(AddDelphi);
intfRef.ourFunction(buffer^);

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

спасибо Stefan

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Если это Delphi 5, то это pre .NET.Лучше всего будет regasm сборка C # и доступ к ней как к COM-объекту из приложения Delphi 5, чтобы она работала.

Конечно, вам также может понадобиться проверить и убедиться, чтовызовы совместимы с COM.

0 голосов
/ 15 марта 2011

Я не уверен, что это работает в Delphi 5, но в прошлом я успешно интегрировал .NET-вещи, написанные на C #, в Delphi, используя RemObjects Hydra (Hydra также может делать наоборот: интеграция Delphi в .NET).

Указатели на функции будут затруднены, так как время выполнения .NET и время выполнения Delphi несколько отличаются.

Возможно, вы захотите экспортировать свои функции Delphi в DLL и использовать P / Invoke со стороны C # /. NET для их импорта. После этого .NET будет маршаллизировать из DLL-библиотеки Delphi в .NET-способ выполнения задач и обратно.

Наконец, вы можете попытаться разместить среду выполнения .NET в Delphi, используя JCL TJclClrHost (см. этот вопрос SO для получения дополнительной информации в этом направлении).

- Йерун

...