【问题标题】:Expose C++ COM data structure to C#向 C# 公开 C++ COM 数据结构
【发布时间】:2012-08-20 20:10:50
【问题描述】:

背景

这可能非常基本,也可能完全不可能。作为 COM 新手,我不知道,鉴于我的 COM 词汇量有限,Google 让我失望了。

我有一个内部定义了许多数据结构的 ATL/MFC C++ COM 对象。 我还有一个引用此 COM 对象的 C# 项目。在 C# 中,我可以调用通过 C++ 端 .IDL 文件公开的方法并获得有效结果(终于!)。

问题

我想使用 .IDL 文件以某种方式将 100 个左右的 C++ 数据结构暴露给 C#(最好不要单独包装每个数据结构)。然后在 C# 中,我将简单地填充适当的结构并调用 COM 方法将数据结构传递到 C++。

基本上,我想在 C# 中重用已经定义的 C++ 结构。这可能吗?如果有,怎么做?

如果重要的话,我正在使用 Visual Studio 2010 和 .NET 4 Framework。

非常感谢。

【问题讨论】:

    标签: c# visual-c++ com


    【解决方案1】:

    所以事实证明我试图将结构放在 IDL 文件中的错误位置。我试图将它添加到 library 定义中,但无论出于何种原因,它都不起作用。

    将它放在接口定义中最终效果很好:

    ...
    interface Icontrol : IDispatch{
    [ 
    uuid(...), 
    version(1.0) ] 
    typedef struct fake
    { 
        int x;
        int y;
        int z;
    } fake; 
    [id(1)] HRESULT open_connection([out,retval] VARIANT_BOOL* result);
    ...
    

    这并没有回答如果您的类型没有将 1:1 映射到 C# 类型该怎么办的问题,但至少我可以在 C# 中使用 C++ 定义的结构。

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2011-02-05
      相关资源
      最近更新 更多