0

背景

这可能非常基本,也可能完全不可能。作为 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。

谢谢一堆。

4

1 回答 1

0

所以事实证明我试图将结构放在 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++ 定义的结构。

于 2012-08-20T12:10:50.877 回答