给出一个VB6结构&一个C ++函数声明如下:
Type MYTYPE
MyField(MAX) AS String * MAX_LENGTH
End Type
Declare Function CFunction Lib "MyCLib.dll" (ByRef data As MYTYPE) As Long
在C#中将此结构传递给C ++ API的正确方法是什么?假设我想在C#中执行以下操作:
MYTYPE myType = new MYTYPE();
myType.MyField[0] = "Some value";
CFunction(ref myType);
更新
我对结构使用了以下定义:
[StructLayout(LayoutKind.Sequential)]
public struct MYTYPE {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX * MAX_LENGTH)]
public string MyField;
}
这样,我能够读/写字符串数组。当然它看起来有点难看,因为我必须自己解析字符串数组,但它的工作原理没有涉及AllocHGlobal
&我试图避免的FreeHGlobal
对应物。