2011-02-01 102 views
2

我正在嘗試爲windows mobile(pre-windows phone 7)創建一個示例項目。我在VS 2008中創建了一個Win32設備項目,並且安裝了Windows Mobile SDKs。我用下面的示例代碼替換主函數存根,但無法用兩個鏈接器錯誤構建。我猜這是一些配置錯誤或構建設置錯誤,但我不知道在哪裏看。我已經構建了很少的C++項目,並且我不熟悉不同的選項。任何人都可以提出任何可能有所幫助無法爲windows mobile創建C++項目

來自Auto-launching CF apps with the HKLM\Init Registry Key

extern "C" DWORD WaitForAPIReady(DWORD, DWORD); 
extern "C" BOOL IsAPIReady(DWORD hAPI); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    // quick sanity check - HKLM\Init will send in our order number 
    if(argc == 0) return 0; 

    BOOL success = FALSE; 

    // wait for window manager - that should be enough for us 
    #if _WIN32_WCE > 0x500 
     success = (WaitForAPIReady(SH_WMGR, 5000) == WAIT_OBJECT_0); 
    #else 
     int i = 0; 
     while((! IsAPIReady(SH_WMGR)) && (i++ < 50)) 
     { 
      Sleep(100); 
     } 

     success = (i < 50); 
    #endif 

    if(success) 
    { 
     int launchCode = _ttoi(argv[1]); 
     SignalStarted(launchCode); 
    } 
    else 
    { 
     RETAILMSG(TRUE, (_T("CFInitGate timed out - SH_WMGR was not ready after 5 seconds\r\n"))); 
    } 

    return 0; 
} 

而鏈接錯誤我看到:

  • 錯誤1個錯誤LNK2019:解析外部符號WaitForAPIReady在函數引用wmain LaunchGate.obj LaunchGate
  • 錯誤2致命錯誤LNK1120:1個未解決的外部問題Windows Mobile 6 Standard SDK LaunchGate

根據WaitForAPIReady文檔,我需要包含kfuncs.h,並根據IsAPIReady文檔我應該使用windev.h。當我#include "kfuncs.h"我沒有得到任何語法錯誤,但鏈接器仍然抱怨。當我#include "windev.h"我找不到文件。

任何想法? 謝謝, brian

回答

1

不要聲明它們爲extern "C"。聲明如下:

extern WINAPI DWORD WaitForAPIReady(DWORD, DWORD); 
extern WINAPI BOOL IsAPIReady(DWORD hAPI); 

這是一個不同的調用約定 - stdcall與cdecl,因此不同的名稱修改規則。

0

做一個dll的dumpbin/EXPORTS,看看它是如何被損壞的。如果你看到一堆奇怪的符號,它是一個C++創建的DLL,你應該聲明它們爲塞瓦應答,否則你應該像你一樣聲明它們。

0

爲什麼你自己聲明函數而不是#include'kfuncs.h?

+1

Kfuncs.h不附帶WM SDK,僅適用於Platform Builder。 – 2011-02-01 18:25:18