在windows下開發的常見錯誤——持續更新,不斷完善

來源:互聯網
上載者:User
1、VC9: LINK : warning LNK4068: /MACHINE not specified; defaulting to X86

原因之一:工程中包含的資源檔不在當前的工程目錄中

解決辦法:檢測資源檔是否有效,無效則將之刪除,OK,問題解決。

2、出現大量錯誤,未識別的“INT”類型,未以“;”結尾等等

原因之一:未包含windows.h檔案

解決辦法:在普通標頭檔之前包含windows.h檔案,OK,問題解決

3、Command line warning D9028 : minimal rebuild failure, reverting to normal build cl(最小重建失敗,正在轉換為標準產生)

原因之一:項目 .idb 檔案已損壞

解決方案:刪除.idb檔案並重建,在Debug目錄中把.idb檔案刪掉,OK,問題解決

4、未處理BadImageFormatException 試圖載入格式不正確的程式。 (異常來自 HRESULT:0x8007000B)

原因之一:該API是在32位系統下面開發的,在64位系統上面開發編譯的時候需要將產生的目標平台設為X86。

解決方案:在右邊的“方案總管”裡,右鍵該項目點擊屬性。在屬性視窗裡選擇“產生”——“目標平台”下拉裡選中“X86"即可。見:

5、C++ Dll回調C#方法,Dll中要將位元組數組傳遞給回調方法,結果訊息處理函數中只接收到一個位元組

原因之一:C++的回呼函數中有一個參數,是處理接收到的位元組流的回呼函數指標,定義基本如下:

        typedef  void  (*fpDataReceived)(char  *data  ,int  len);
    其中char  *data是從DLL中返回的位元組流,空間已經在DLL中分配了。
    下面是在C#中定義的委託
        public  delegate  void  OnDataReceived(byte[] data,  int  len); 
    下面是C#中回呼函數的實現
        public  void  getData(byte[]  data,  int  len)
        {
            //結果這裡data的維數只有1,也就是說只收到一個位元組。
        }

解決方案:1、using System.Runtime.InteropServices;
    2、按如下方式定義委託:
        public delegate void OnDataReceived(IntPtr pData , int len); //pData是個指標地址,對應上面的char*指標data
    3、回呼函數的實現如下:
        public void getData(IntPtr pData , int len)
        {
            byte[] data = new byte[len];
            Marshal.Copy(pData, data, 0, len); 
            //接著處理 data 裡的內容
         }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.