将Delphi 5 OleVariant编组到C#

时间:2009-11-20 11:45:39

标签: .net delphi interop pinvoke variant

我正在尝试使用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可读的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

由于OleVariant几乎可以是任何类型,并且C#中的所有类型都可以作为对象处理,我会尝试使用system.object。

同样this link可能会有所帮助。