невозможно построить проект C ++ для Windows Mobile - PullRequest
2 голосов
/ 01 февраля 2011

Я пытаюсь создать пример проекта для Windows Mobile (до Windows Phone 7).Я создал проект устройства Win32 в VS 2008, и у меня установлены Windows Mobile SDK.Я заменяю заглушку основной функции следующим примером кода, но он не может быть собран с двумя ошибками компоновщика.Я предполагаю, что это какая-то ошибка конфигурации или ошибка настроек сборки, но я не знаю, где искать.Я построил очень мало C ++ проектов, и я не знаком с различными вариантами.Кто-нибудь может предложить что-нибудь, что может помочь?

Взято из: Автоматический запуск приложений CF с ключом реестра HKLM \ Init

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" получаю файл не найден.

Есть идеи?спасибо, Брайан

Ответы [ 3 ]

1 голос
/ 01 февраля 2011

Не объявляйте их как extern "C". Объявите так:

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

Это другое соглашение о вызовах - stdcall и cdecl, таким образом, разные правила искажения имен.

0 голосов
/ 01 февраля 2011

Почему вы объявляете функции самостоятельно, а не # include'ing kfuncs.h?

0 голосов
/ 01 февраля 2011

Сделай мусорную корзину / ЭКСПОРТ из dll и посмотри, как она покалечена.если вы видите кучу нечетных символов, то это dll, созданная на С ++, и вы должны объявить их как отвеченные seva, иначе вы должны объявить их как вы.

...