【问题标题】:unable to build C++ project for windows mobile无法为 windows mobile 构建 C++ 项目
【发布时间】:2011-02-01 16:36:52
【问题描述】:

我正在尝试为 windows mobile(windows phone 7 之前的版本)构建一个示例项目。我在 VS 2008 中创建了一个 Win32 设备项目,并安装了 windows mobile SDK。我用以下示例代码替换了主函数存根,但由于两个链接器错误而无法构建。我猜这是某种配置错误或构建设置错误,但我不知道去哪里找。我构建的 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:函数 wmain LaunchGate.obj LaunchGate 中引用的外部符号 WaitForAPIReady 无法解析
  • 错误 2 致命错误 LNK1120:1 个未解决的外部 Windows Mobile 6 标准 SDK LaunchGate

根据 WaitForAPIReady 文档,我需要包含 kfuncs.h,根据 IsAPIReady 文档,我应该使用 windev.h。当我 #include "kfuncs.h" 我没有语法错误,但链接器仍然抱怨。当我#include "windev.h" 找不到文件时。

有什么想法吗? 谢谢, 布莱恩

【问题讨论】:

    标签: c++ windows-mobile compact-framework linker


    【解决方案1】:

    不要将它们声明为extern "C"。如此声明:

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

    这是一个不同的调用约定 - stdcall 与 cdecl,因此不同的名称修改规则。

    【讨论】:

      【解决方案2】:

      做一个 dll 的 dumpbin /EXPORTS 看看它是如何被破坏的。如果你看到一堆奇怪的符号,它是一个 c++ 创建的 dll,你应该将它们声明为 seva 回答,否则你应该像你一样声明它们。

      【讨论】:

        【解决方案3】:

        为什么要自己声明函数而不是#include'ing kfuncs.h?

        【讨论】:

        • Kfuncs.h 未随 WM SDK 提供,仅随 Platform Builder 提供。
        猜你喜欢
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 2015-03-21
        • 2023-04-07
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多