与VT#U USERDEFINED类型的参数进行互操作C#

与VT#U USERDEFINED类型的参数进行互操作C#,c#,c++,com,interop,com-interop,C#,C++,Com,Interop,Com Interop,我尝试从C#调用一个COM方法,该方法要求将类型为VARIANT的参数定义为VT_USERDEFINED(它也接受其他类型,但它有一个特殊处理VT_USERDEFINED) 界面为: HRESULT GetRecord( [in]变体varKey, [out]变体*pvarRecord); 问题是如何从C调用这个方法,其中varKey是一个定义为VT\u USERDEFINED的整数 > COM互操作DLL是由C++中的IDL文件< > TLBIMP .exe 生成的。 编辑1 C++的代

我尝试从C#调用一个COM方法,该方法要求将类型为
VARIANT
的参数定义为
VT_USERDEFINED
(它也接受其他类型,但它有一个特殊处理
VT_USERDEFINED

界面为:

HRESULT GetRecord(
[in]变体varKey,
[out]变体*pvarRecord);
问题是如何从C调用这个方法,其中
varKey
是一个定义为
VT\u USERDEFINED
的整数

<> > COM互操作DLL是由C++中的IDL文件< <强> > TLBIMP .exe <强>生成的。 编辑1 C++的代码是这样的:

if(varKey.vt==vt\u用户定义)
{
//给定的顺序记录编号
UINT uintRecordNumber=varKey.uintVal;
...
}

此链接可能会有所帮助:该页面上没有任何内容提到处理VT_USERDEFINED是否有效
void GetRecord(object varKey,out object pvarRecord)
PreserveSig=false
(或者您可以返回
int
并设置
PreserveSig=true
)我想这取决于你到底想传递什么here@paulsm4我看过那一页,但它对我没有帮助。它没有说任何关于
VT_USERDEFINED
VT_USERDEFINED不是COM自动化数据类型,它不受.NET支持,您必须重新定义自己的变体结构和/或通过IntPtr,无论如何,您自己做这项工作。或者使用另一种变体类型,如VT_记录。