繁体   English   中英

使用out参数从c#调用本机c ++代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM