2010-11-11 105 views
0

我需要從C#4.0應用程序中調用用Borland C++ Builder 6.0編寫的dll函數。我可以成功地調用該DLL的其他功能,但不是所需的功能。該功能的區別在於它顯示了VCL GUI窗口。我懷疑這是問題所在,因爲我從C++項目中成功調用了這個函數。我甚至創建了自己的C++封裝器Dll,它封裝了我的目標BCB DLL - 結果是一樣的。我經常收到SEHException,這意味着我的Dll內部異常被拋出,但我無法檢測到什麼樣的因爲我無法調試此DLL。從C#調用BCB dll#

您對此有何見解?

+0

查看/播放調用約定。 – leppie 2010-11-11 06:29:18

+0

你應該在這裏展示C++函數定義和C#P/Invoke部分的代碼片段。 – macropas 2010-11-11 09:14:24

回答

0

在演示項目中調用轉換之後,我發現當您對約定和編組不正確時,我們不會引發SEHException,您將永遠不會得到SEHException,但會發生內存/訪問異常。

最後我找到了原因。這是非常愚蠢的..如果從包含「bin」字符串(.NET案例)的文件夾中調用dll,則無法創建文件,並且使用SEH例程引發C++ Builder異常:)這就是爲什麼從C++調用成功。

小結:

  • SEH異常意味着在DLL內部異常。在C++ Builder中,所有異常都基於此。

  • 儘管您似乎確信發生了什麼,但仍嘗試調試原始源代碼。