我在C ++项目的.idl文件中定义了一个struct,该struct包含一个VARIANT成员。
[uuid(C42A456C-C139-4339-A023-F9458C8A7386)]
struct TEST_STRUCT
{
int Type;
VARIANT DateTime;
float Result;
};
界面是:
[id(1), helpstring("Test1")] HRESULT Test1([in] int nID, [out, retval] SAFEARRAY(struct TEST_STRUCT)* ppVal);
然后我通过“添加引用”将此结构导入C#项目,但成员顺序已更改。它看起来像这样:
namespace ASLib
{
[Guid("C42A456C-C139-4339-A023-F9458C8A7386")]
public struct TEST_STRUCT
{
public object DateTime;
public int Type;
public float Result;
}
}
在C#中将DateTime成员的顺序更改为第一个,当C#调用该接口时,它导致Interop.COMException“Bad variable type”。
那么有什么方法可以修复COM idl文件中struct成员的顺序?非常感谢。
答案 0 :(得分:0)
您可以通过StructLayout手动修复结构布局。
将FieldOffset
属性添加到生成的字段中。
它可能类似于:
public struct TEST_STRUCT
{
[FieldOffset(4)]
public object DateTime;
[FieldOffset(0)]
public int Type;
[FieldOffset(8)]
public float Result;
}