我收到了一些C/C++代碼,用於另一個項目。我把它放到一個DLL中,然後從C++測試工具中調用DLL。它工作得很好,並且與代碼只是一個函數調用時的結果相匹配。從C++調用的C++ DLL應用程序工作,從C#控制檯調用應用程序有堆棧溢出
但是,我然後試圖讓DLL從C#應用程序工作。我轉換了測試工具,並進行了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);
其中報頭包含:
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);
在C#中我使用:
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);
用一個函數調用是這樣的:
proxy_rec_main(simtime,mxSgl,mzSgl,ry,start_dig,blytarg_on,blytarg,spread_on,last_call,ref outputs);
的DLL功能在多次調用for循環。 C++代碼運行得很好。 C#代碼會引發堆棧溢出錯誤。我向proxy_rec_main函數添加了一些調試狀態,並且它在函數返回之前似乎擊中了每條語句。但它似乎拋出了從函數返回的錯誤。任何見解都會受到歡迎。
謝謝。
你的意思是'IntPtr'? – 2011-04-19 23:11:51
該死的自動更正:-) – 2011-04-19 23:19:46
所以我不太清楚如何進行這些更改。我已經將數組編組到一個非託管數組並且有一個IntPtr。但我不知道如何改變界面來接受它。 – 2011-04-19 23:26:32