2015-01-15 8 views
2

그래서 일부 C# 코드에서 dll로 C++ 네이티브 함수를 실행하려고합니다. 그리고 그것은 잘 작동하지만 내 함수 호출에서 'out'을 사용할 때 메모리 액세스 위반이 발생합니다. 이것은 모습입니다 같은 :C#에서 네이티브 C++ 코드를 호출하여 매개 변수를 사용하지 않음

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; 
} 

[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++ 함수를 내가 나는 뛰어 다니고있어. C++ 코드에서 fixtureCount를 설정하려고하면 다음 오류가 발생합니다.

+1

P/Invoke 정의 ('[DllImport]'등)도 추가해야합니다. – Luaan

+0

죄송합니다, 그 정의를 보여주는 걸 잊었습니다. 지금 질문을 수정했습니다. – Enzign

+0

아마 중복 : stackoverflow.com/questions/26992178/c-sharp-dllimport-with-pointers – Maher

답변

0

좋아, 마침내 알아 냈습니다. 메모리 액세스 위반을 일으킨 행 1과 행 2였습니다. 비록 내가 그들을 내 C++ 코드에서 사용하지는 않았지만. 충돌을 수정하기 위해 x, y, z 값을 수레로 보내야했습니다.

그래서 문제가되었던 것은 Vector3에서 b2Vec3으로 변환되었습니다. 코멘트에 언급 된 한스 (Hans)처럼 문제는 정착되지 않았습니다.