我有一个 C++ COM 服务器,它用数据填充 C# 调用者的结构。
该结构在 C++ IDL 中定义,如下所示:
interface Icontrol : IDispatch{
[
uuid(...),
version(1.0) ]
typedef struct testStructure
{
int x;
int y;
int z;
...
} testStructure;
...
[id(9)] HRESULT getStruct([ref,in,out] testStructure * theData);
...
然后,在 C# 代码中:
EO_Lib.testStructure test = new EO_Lib.testStructure();
EO_Lib.getStruct(ref test);
通过简单地在 C# 结构中为非 C# 本地字段使用 MarshallAs,我可以使用常规 .DLL 使这项工作没有问题。但我不能让它在 COM .DLL 上工作。我怀疑这是因为我对 IDL 缺乏了解。
我需要做的是用我用适当的 MarshallAs() 信息创建的新 C# 类型调用 getStruct()。我该怎么做呢?
如果有帮助,我正在使用 Visual Studio 2010 MFC/ATL C++ 和 C# .NET 4 Framework。