我有一個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