我正在尝试使用C#(2.0 / 3.5)中的一些旧版Delphi 5 DLL。一些导出的函数声明如下:
function SimpleExport: OleVariant; stdcall;
function BiDirectionalExport(X: OleVariant; var Y: OleVariant): OleVariant; stdcall;
我希望使用Marshal.GetDelegateForFunctionPointer将它们设置为代理,但是我无法正确获取Marshaled数据。我正在使用kernel32导入的LoadLibrary和GetProcAddress,所以我依靠GetDelegateForFunctionPointer来进行实际的编组,而不是静态的p / invoke声明。
由于.NET封送处理服务可以将对象封送到COM OleVariants,我试过这个。但这会导致异常:“PInvoke限制:无法返回变体。”。所以我想我需要使用自定义编组器。
将Delphi 5 OleVariant编成.NET可读的正确方法是什么?
答案 0 :(得分:1)
由于OleVariant几乎可以是任何类型,并且C#中的所有类型都可以作为对象处理,我会尝试使用system.object。
同样this link可能会有所帮助。