我有一个C++ COM服务器,我最近重新编译为64位。这个COM服务器有一个包含struct参数的方法,该参数包含一些int和BSTR以及另一个结构。现在,我试图从64位.Net C#应用程序调用此COM服务器。只要我不尝试填充任何字符串参数,我就可以成功加载我的COM服务器并调用此方法。如果我尝试在int成员中传递有效值,它们最终会在COM对象实现结束时损坏。看起来好像结构被编组的方式是错误的。这段代码在32位应用程序中工作得很好。解决x64 com互操作问题
以下为IDL是在C++侧限定的一般方法:(忽略高飞的typedef,它的一些遗留码)
[helpstring("method Method1")] HRESULT Method1([in] STRUCT1* pStruct, [in, out] DWORD* inparm1, [out]USHORT* outparm2);
typedef struct _Struct2
{
USHORT p1;
BSTR s1;
BSTR s2;
BSTR s3;
BSTR s4;
DWORD p2;
DWORD p3;
} STRUCT2;
typedef struct _Struct1
{
DWORD p1;
DWORD p2;
BSTR s1;
BOOL p3;
STRUCT2 struct2;
}STRUCT1;
试图填充构件在STRUCT2导致未定义的行为和崩溃。任何人都可以看到为什么这将是64位诗句32位代码的问题?是否有一些我需要发挥的编组魔法?此外,我似乎没有工具来解决编组问题。有什么建议可以帮助您排除打包者在封面上做的事情?
顺便说一下,我使用添加引用工具添加了对.NET项目的引用。 – 2010-11-02 22:11:29