![]() |
1
1
您面临的问题是返回了一个指针——实际上不是字符串或数组。封送拆收器无法将指针转换为数组或字符串,因为长度未知。 解决方案可能是在C中进行指针处理。您还应该弄清楚您是否负责释放指针,或者库是否会为您这样做。
|
![]() |
2
0
C结构的封送声明与C++结构不匹配,它们对应于C++结构。
您可能可以使用一些特殊封送处理代码,但我认为更简单的方法是更改C++侧的分配方式。 我确信还有其他方法可以做到这一点,但我要做的一个方法是使用安全阵列。SafeArray是标准COM API的一部分,最初是为与VB的互操作而创建的(我认为)。 http://msdn.microsoft.com/en-us/library/ms221145.aspx safearray知道它的大小和数据类型,所以封送拆收器很容易处理。我必须被锁定之前,你可以写进它在C++中,然后解锁之前尝试和封送它。 所以你的新参数结构是这样的(我认为不需要大小,safearray已经知道了)
在C++代码中,使用数组来分配数组。
那么结构的C声明是
|
![]() |
3
0
这是你试过的吗?lparray和sizeParamIndex=1
|
![]() |
4
0
为了供您参考,我在我的项目中使用了layoutKind.Explicit和FieldOffset,并忽略了arraysubtype。 [结构布局(layoutkind.explicit,charset=charset.ansi,size=50004)] 公共结构参数_data { [字段偏移量(0)] [MarshalAs(UnmanagedType.ByValArray,SizeConst=50000)] 公共字节[]数据; [场偏移(50000)] [封送处理(UnmanagedType.i4)] 公共int大小; } |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |