다른 프로젝트에서 사용하기 위해 C/C++ 코드를 수신했습니다. DLL에 넣은 다음 C++ 테스트 장치에서 DLL을 호출했습니다. 코드가 함수 호출 일 때부터 결과가 일치했습니다.C++ 콘솔에서 호출 된 C++ DLL C# 콘솔에서 호출 된 응용 프로그램 스택 오버플로가 있습니다.
그러나 C# 응용 프로그램에서 작동하도록 DLL을 가져 오려고했습니다. 테스트 하네스를 변환하고 DLL 호출을 만들었지 만 스택 오버플로 예외를받습니다.
는 C++에서 저는 추가 :
#include "proxy_rec_02.h"
#pragma comment(lib,"proxy_rec_02.lib")
그리고이 같은 기능이라고 :
proxy_rec_main(simtime,mx$gl,mz$gl,ry,start_dig,blytarg_on,blytarg,spread_on,last_call,outputs);
헤더가 포함 : C#에서 내가 사용
void DLL_EXPORT proxy_rec_main(double simtime, double mx$gl, double mz$gl, double ry, int start_dig,
int blytarg_on, double blytarg, int spread_on, int last_call, double *outputs);
을 :
using System.Runtime.InteropServices;
이 같은 함수 호출로
[DllImport("proxy_rec_02.dll")]
unsafe static extern void proxy_rec_main(double simtime, double mxSgl, double mzSgl, double ry, int start_dig,
int blytarg_on, double blytarg, int spread_on, int last_call, ref double[] outputs);
6,
및
: DLL 함수가 for 루프에서 여러 번 호출proxy_rec_main(simtime,mxSgl,mzSgl,ry,start_dig,blytarg_on,blytarg,spread_on,last_call,ref outputs);
. C++ 코드는 잘 실행됩니다. C# 코드에서 스택 오버플로 오류가 발생합니다. proxy_rec_main 함수에 디버그 statemaints를 추가하고 함수가 반환되기 전에 각 명령문에 충돌하는 것으로 보입니다. 하지만 그것은 함수에서 반환에서 오류를 던질 것으로 보인다. 모든 통찰력이 환영받을 것입니다.
감사합니다.
'IntPtr'을 원하셨습니까? –
지독한 자동 수정 :-) –
이러한 변경 방법은 잘 모르겠습니다. 배열을 관리되지 않는 배열로 정렬하고 IntPtr을 가져 왔습니다. 하지만 그것을 가져갈 인터페이스를 변경하는 방법을 잘 모르겠습니다. –