Marshal字符串数组

时间:2017-09-11 07:50:18

标签: c# c++ marshalling

给出一个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对应物。

0 个答案:

没有答案