Я получил код C / C ++ для использования в другом проекте.Я положил его в DLL, а затем вызвал 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, и кажется, что она попадает в каждое утверждение до ее возврата.Но, похоже, выдает ошибку при возврате из функции.Любые идеи будут приветствоваться.
Спасибо.