2011-02-01 101 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