[英]Calling into native c++ code from c# with out parameter
因此,我试图通过某些C#代码在dll中运行C ++本机函数。 而且它工作正常,但是,当我在函数调用中使用“ out”时,出现内存访问冲突。 看起来是这样的:
C#功能
[DllImport(pluginName)]
public static extern IntPtr AddTriangleFixtuers(ShapeDef shapeDef, IntPtr toBody, ref Vector2 vertices, int triangleCount, Vector3 row1, Vector3 row2, out int fixtureCount);
...
int test = 1;
B2D.AddTriangleFixtuers(def, body.body, ref shapeTriangles[0], shapeTriangles.Length/3, firstRow, secondRow, out test);
C ++函数
EXTERN_DLL_EXPORT b2Fixture* __stdcall AddTriangleFixtuers(ShapeDef shapeDef, IntPtr* toBody, b2Vec2* vertices, int triangleCount, b2Vec3 row1, b2Vec3 row2, int& fixtureCount) {
fixtureCount = 0;
b2Fixture* lastFixture = NULL;
return lastFixture;
}
我已将代码最小化以突出我遇到的问题。 一旦我尝试将C ++代码中的fixtureCount设置为任何值,就会收到以下错误:
Assembly-CSharp.DLL中发生了类型为'System.AccessViolationException'的异常,但未在用户代码中处理。其他信息:尝试读取或写入受保护的内存。 这通常表明其他内存已损坏。
好吧,我终于想通了。 是row1和row2导致了内存访问冲突。 即使我没有在我的C ++代码中使用它们。 我必须将x,y,z值作为浮点数发送来修复崩溃。
因此,问题是从Vector3到b2Vec3的转换。 就像汉斯在评论中提到的那样,问题不在于fixtureCount。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.