在C#方面我有像
这样的代码[DllImport("dppClientModule.dll", CallingConvention = CallingConvention.StdCall)]
private static extern UInt32 dppModuleDeinit(
[In, Out, MarshalAs(UnmanagedType.LPStruct)]
dppErrorInfo_t pErrInfo);
但它被称为
dppErrorInfo_t ei = new dppErrorInfo_t();
UInt32 result = dppModuleDeinit(ei);
我的第一个问题是:ref
中缺少ei
个关键字,不在上面吗?
还有另一个包装函数,如:
private void Test(ref dppErrorInfo_t x)
{
UInt32 result = dppModuleDeinit(x);
}
我的第二个问题是:Test
的来电者是否会观察x
变量的变化? (假设dppModuleDeinit
确实改变了原始变量)
注意:由于通常dppModuleDeinit
需要ref
参数,因此在传递给ref
时,您必须在x
之前添加dppModuleDeinit
那不行。
PS以下是该函数在C ++上的外观
dppFUNC(HRESULT) dppModuleDeinit(
dppErrorInfo_t *pErrInfo) ; // Error info
答案 0 :(得分:0)
使用参数定义多种类型[In,Out,ref]应该没问题。
对于所有LOB,.NET在内部将这些参数作为ref传递。所以Test的调用者必须遵守这些变化。