我有一个C#应用程序(在Unity3d mono中),它通过C-API将一些数据传递给c ++非托管DLL。它传入包含数组的嵌套Struct。一切正常,直到C-API关闭(在}
函数的位置)时,然后我从VS2017获得“ Frame not in Module”消息(如果我“> Continue,则将收到0xC0000005
反汇编建议的访问冲突)缺少ptr-可能是解除引用错误)
编辑:我认为这可能是我的源结构具有指向数组的指针//编辑
是什么导致此“框架不在模块中”?-作为消息不是很丰富
那我该怎么办?
我的代码...
我有一个ac#结构层次结构。
private struct Vector3
{
public float x;
public float y;
public float z;
}
private structure Location
{
public Vector3 coords;
public float distanceFromOrigin;
}
private struct Locations
{
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 10)]
public Location[] locations;
}
private struct Scene
{
public Locations cam1;
public Locations cam2;
public float timeInMilliSecs;
}
我实例化Scene
,并cam1
与cam2
各得到的阵列10个位置。一切都很好。至此可以正常工作,并且用正确的数据填充数据结构。
我将的实例传递Scene
给非托管DLL
[DllImport(dllname)]
private static extern void updateScene(Scene scene);
在我的C ++中
extern "C" {
DLL_EXPORT void updateScene(Scene scene);
}
和超载
void updateScene(Scene scene) {
setSecene(scene); // this calls function fine but with erroneous data
}
和等效结构的签名
struct Vector3
{
float x;
float y;
float z;
}
struct Location
{
Vector3 coords;
float distanceFromOrigin;
}
struct Locations
{
Location locations[10];
}
struct Scene
{
Locations cam1;
Locations cam2;
float timeInMilliSecs;
}
该Scene
结构体被传递到C
与正确的数据的进到C ++。但是随后出现了问题-我猜这是内存问题,但是我不确定该怎么办。
查看反汇编可能表明它是指针问题?
0000000040BDAE57 49 89 0B mov qword ptr [r11],rcx
有人可以帮忙吗?
最后,我将整个嵌套结构整理到一个指针中-c#中的所有更改
[DllImport(dllname, CallingConvention = CallingConvention.Cdecl)]
private static extern void updateScene(IntPtr scene);
然后,在我调用updateScene()之前,我正在整理场景结构
IntPtr scenePtr = Marshal.AllocHGlobal(Marshal.SizeOf(scene));
Marshal.StructureToPtr(scene, scenePtr , true);
updateScene(scenePtr);
其他一切都保持不变。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句