none
請教C#如何調用VC++寫出來的DLL RRS feed

  • 問題

  •  

    各位先進好,小弟有疑惑想請教各位。我用VC++建立起一個DLL檔案,然後我再用C#寫出個表單然後將VC++的DLL放入Debug目錄下,然後執行,程式有成功調用DLL裡面的Function。雖然是成功但是我要如何讓C#調用VC++的DLL時候,也能放中斷點在VC++中看運行狀況,不知是否有先進知道這方法嗎?
    2008年9月13日 上午 02:24

解答

  • .Net 的 DLL 我測試過可以同步除錯,但是函數型的 DLL 我沒試過。

     

    你試試看:

    1. 將 C# 專案編譯結果從 \Debug\bin 改為 .\ ,也就是專案目錄。

    2. 將 VC DLL 專案加入你目前的方案,同樣把 DLL 輸出的位置改道 C# 專案輸出的位置

    3. 設定專案編譯順序

    4. 在 VC DLL 函數內設定中斷點,進行測試。

     

    .Net DLL 專案這樣就可以除錯了。

     

     

    2008年9月13日 下午 12:36

所有回覆

  •  

     

    VC部分就是這樣而已

     

    #include<math.h>

     

    double _stdcall integral_sin(double val_delta,double interval){


        double val_Numerical_integration =0 ;


     for(double i=(interval/val_delta) ; i<interval ; i=i+(interval/val_delta) ){
      

            val_Numerical_integration =  val_Numerical_integration +  ( (interval/val_delta)*3.14159265358979 / 180 )*( sin(i * 3.14159265358979 / 180) ); 
      
     }

        return(val_Numerical_integration);
    }

    2008年9月13日 上午 03:46
  • ...

    你的 VC 建立時,是選擇哪種專案?

     

     

    2008年9月13日 上午 07:22
  • 原始用VC6的Win32 Dynamic-Link Library,然後用vs2005自動將Project變成vs2005的格式

     

    2008年9月13日 上午 07:36
  • HI,

     

    請設定專案的屬性, 選擇[偵錯]頁籤, 勾選[啟用Unmanaged 程式碼偵錯], 然後直接從您的程式逐步執行, 就可以進入DLL中偵錯了

     

    tihs

    2008年9月13日 上午 07:56
  •  

    你好,我試了一下,原先未設定前會有 " 找不到'devenv'的偵錯資訊或不相符。未載入符號 你要繼續偵錯嗎? " ,經過你說的設定後此訊息就消失,且可以調用VC的Function但是在VC中沒辦法設定中斷點,會出現"目前無法叫用中斷點。未載入文件的符號。"  請教我還需少甚麼設定?
    2008年9月13日 上午 08:49
  • .Net 的 DLL 我測試過可以同步除錯,但是函數型的 DLL 我沒試過。

     

    你試試看:

    1. 將 C# 專案編譯結果從 \Debug\bin 改為 .\ ,也就是專案目錄。

    2. 將 VC DLL 專案加入你目前的方案,同樣把 DLL 輸出的位置改道 C# 專案輸出的位置

    3. 設定專案編譯順序

    4. 在 VC DLL 函數內設定中斷點,進行測試。

     

    .Net DLL 專案這樣就可以除錯了。

     

     

    2008年9月13日 下午 12:36
  • 補充:

    當你設定 VC DLL 輸出目錄的目的是:

    1. DLL 用 DllImport 宣告時,無須管到路徑

    2. DLL 輸出的目錄同時包含除錯符號檔,你先前說沒有載入除錯符號檔的就是這個。

     

    2008年9月13日 下午 12:38
  • 謝謝你的回應,我的困惑以解決,謝謝你

     

    2008年9月13日 下午 02:36
  • 我今天再試了一下發現,我是能夠放中斷來觀看程式碼的流程與值變化,但是在Debug期間不能改變程式碼嗎?

    1.我在C#中用 將"啟用Unmanaged程式碼偵錯" 啟用。我是能夠進去DLL中觀看其動作,但是中途修改其程式碼會發生

       "此原始程式檔已經變更,因此已經不符合用來建置偵錯中應用程式的檔案版本"。在c#在修改則會發生啟用

         Unmanaged偵錯時不允許變更。不知有何設定或者是改變程式寫法,可以一邊Debug,一邊改程式的方法。

    2.若我將"啟用Unmanaged程式碼偵錯"取消,C#部分可以可以一邊Debug,一邊改程式,但是就進不了Dll中跟蹤

        錯誤。

     

    煩請友知道的高手能夠指點之,謝謝。

     

     

    2008年9月14日 上午 05:34
  • 基本上,過去除了 VB 這種直譯式的除錯環境,是不允許除錯中變更程式碼。

     

    在 VS2003 以前完全不行,到了 VS2005 稍微改善,這也是因為 VB6 的程式設計師一直在向微軟反應功能需求,才會加入的,但這也僅限制在不影響程式邏輯結構的變更,比如說加個迴圈、判斷式之類的,就不被允許。

     

    VC / C# 也是到了 VS2005 以後才開始允許在除錯階段小範圍的程式碼變更。

     

    而函數型 DLL 檔是程式載入時,就會讀取並鎖定,亦即在執行期間,函數型的 DLL 檔是不允許重新編譯,更不要說重新載入了,所以當然就不可能在 Debug 階段中進行修改。

     

    你是命太好,才會習慣於 Debug 階段時進行修改,程式設計師不要養成這種習慣,這是給初學者用的。良好的程式規畫應該在撰寫前就完善邏輯,明確的知道輸出輸入結果,若需要即時變數協助,可配合下方的即時運算視窗,或是命令視窗除錯。

    2008年9月14日 上午 06:19