【问题标题】:Marshaling Delphi 5 OleVariant to C#将 Delphi 5 OleVariant 编组为 C#
【发布时间】:2010-12-18 16:54:10
【问题描述】:

我正在尝试使用来自 C# (2.0/3.5) 的一些旧版 Delphi 5 DLL。一些导出的函数是这样声明的:

function SimpleExport: OleVariant; stdcall;
function BiDirectionalExport(X: OleVariant; var Y: OleVariant): OleVariant; stdcall;

我希望使用 Marshal.GetDelegateForFunctionPointer 将这些设置为委托,但我无法正确编组数据。我正在使用 LoadLibrary 和 GetProcAddress 的 kernel32 导入,因此我依靠 GetDelegateForFunctionPointer 来执行我的实际编组,而不是静态 p/invoke 声明。

由于 .NET 编组服务可以将对象编组到 COM OleVariants,所以我尝试了这个。但这会导致异常:“PInvoke 限制:无法返回变体。”。所以我想我需要使用自定义编组器。

将 Delphi 5 OleVariant 编组为 .NET 可读的正确方法是什么?

【问题讨论】:

    标签: .net delphi interop pinvoke variant


    【解决方案1】:

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

    this link 也可能会有所帮助。

    【讨论】:

    • 不幸的是,将 System.Object 与默认的封送服务一起使用是行不通的。我已经更新了我的问题以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    相关资源
    最近更新 更多