2013-01-21 144 views
0

我正在研究一個項目,使C#與以前在C++中創建的DLL交互。下面 的代碼顯示了我怎麼導出我需要的功能:C++ dll不返回到C#

extern "C" __declspec(dllexport) int iterateAndTest(int testSize, char* testHash){ 

CUDADLL dll; 
int ret = dll.iterateAndTest(testSize, testHash); 
return ret; 
} 

下面的代碼顯示瞭如何申報在C#中的功能:

[DllImport("C:\\Users\\BrunoBraga\\Documents\\Visual Studio 2012\\Projects\\CUDADLL\\Debug\\CUDADLL.dll")] 
public static extern int iterateAndTest(int testSize, string testHash); 

的問題是:DLL函數沒有返回任何東西。實際上,dll曾經被調用過,從不返回到C#,程序只是結束。

我不確定我是否給出正確的代碼,但我想有一些關於我錯過的dll的東西。

對不起,延遲迴復。這是兩個問題: 1 - 當我創建對象時,我應該使用CUDADLL DLL的新insted。我以爲我可以做到這一點,因爲沒有新的我仍然能夠進入內部的領域。

2 - 程序應該在admin中運行,否則會出現一些崩潰;

再次感謝你們。

+2

您是否測試了a)您是否真的進入了C++方法,並且傳入了正確的值並且b)從其他C++代碼調用時返回值? – ChrisF

+0

如果它永遠不會返回它可能會死於託管/非託管代碼之間的轉換......這可能有幾個原因,如堆棧問題或存儲器處理等一些古怪等。 – Yahia

+0

是的。爭論正在順利通過。我打印他們的計算beeing做得很好我檢查,但功能不返回:( – BrunoMCBraga

回答

1

在你的C++代碼插入__stdcall

extern "C" __declspec(dllexport) __stdcall int iterateAndTest(int testSize, char* testHash); 
在C#

[DllImport("yourdll.dll", EntryPoint="iterateAndTest", CallingConvention=CallingConvention.StdCall)] 
public static extern int iterateAndTest(int testSize, string testHash); 

使用cout在你的C++函數,如果函數被調用輸出,如果你使用的是Visual顯示在輸出窗口工作室。 嘗試將您的C++ dll放在您的輸出目錄中

可能的錯誤:未找到dll或將引發入口點異常。