链接器错误,winapi,掌上电脑

时间:2013-08-14 16:41:59

标签: winapi linker pocketpc

在按下按钮后,在应用程序显示标签中的时间之后,最终导致链接器错误。

造成这种情况的代码行是:

_wstrdate(dateStr);

错误是:

error LNK2019: unresolved external symbol _wstrdate referenced in function "long __cdecl WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YAJPAUHWND__@@IIJ@Z)
fatal error LNK1120: 1 unresolved externals

我被告知发布我的WNDPROC&链接器设置在这里:

  LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;

static HWND hButton;
static HWND hLabel;
static SHACTIVATEINFO s_sai;

switch (message) 
{
    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        // Parse the menu selections:
        switch (wmId)
        {
            case IDM_HELP_ABOUT:
                DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
                break;
 #ifdef WIN32_PLATFORM_PSPC
            case IDM_OK:
                SendMessage (hWnd, WM_CLOSE, 0, 0);             
                break;

            case 1001:
            {



                _wstrdate(dateStr);

                SetDlgItemTextW(hWnd, 1003, dateStr);


                break;
            }

#endif // WIN32_PLATFORM_PSPC
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_CREATE:
#ifdef SHELL_AYGSHELL
        SHMENUBARINFO mbi;

        memset(&mbi, 0, sizeof(SHMENUBARINFO));
        mbi.cbSize     = sizeof(SHMENUBARINFO);
        mbi.hwndParent = hWnd;
        mbi.nToolBarId = IDR_MENU;
        mbi.hInstRes   = g_hInst;

        hButton = CreateWindow( L"button",L"Time",
            WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
            100,200,
            50,20,
            hWnd, (HMENU) MEDDELANDEBUTTON_ID,
             NULL, NULL);



        hLabel = CreateWindowW(L"STATIC",L"Time",
        WS_VISIBLE | WS_CHILD | SS_RIGHT,
        10,200,75,35,hWnd, (HMENU)1003, NULL, NULL);





        if (!SHCreateMenuBar(&mbi)) 
        {
            g_hWndMenuBar = NULL;
        }
        else
        {
            g_hWndMenuBar = mbi.hwndMB;
        }

        // Initialize the shell activate info structure
        memset(&s_sai, 0, sizeof (s_sai));
        s_sai.cbSize = sizeof (s_sai);
#endif // SHELL_AYGSHELL
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);

        // TODO: Add any drawing code here...

        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
 #ifdef SHELL_AYGSHELL
        CommandBar_Destroy(g_hWndMenuBar);
 #endif // SHELL_AYGSHELL
        PostQuitMessage(0);
        break;

    case WM_ACTIVATE:
        // Notify shell of our activate message
        SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
        break;
    case WM_SETTINGCHANGE:
        SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

此处还有我的链接器选项:(标准visualstudio 2008)

/OUT:"Pocket PC 2003 (ARMV4)  \Debug/c++pocketpc.exe" /INCREMENTAL /NOLOGO /MANIFEST:NO /NODEFAULTLIB:"oldnames.lib" /DEBUG /PDB:"Pocket PC 2003 (ARMV4)\Debug/c++pocketpc.pdb" /STACK:65536,4096 /DYNAMICBASE:NO /ERRORREPORT:PROMPT coredll.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib

1 个答案:

答案 0 :(得分:0)

来自Control.WinProc上的Microsoft页面,

<强>平台

  

Windows 98,Windows 2000 SP4,Windows CE,Windows Millennium Edition,适用于Pocket PC的Windows Mobile,适用于智能手机的Windows Mobile,Windows Server 2003,Windows XP Media Center Edition,Windows XP Professional x64 Edition,Windows XP SP2,Windows XP简化版

所以,你就在那里。

但是,在 .NET Framework安全性下,我看到了

  
      
  • SecurityPermission,用于继承类以调用非托管代码。关联枚举:SecurityPermissionFlag.UnmanagedCode。

  •   
  • 直接调用方的SecurityPermission调用非托管代码。关联枚举:SecurityPermissionFlag.UnmanagedCode。

  •   

因此,看起来您可能需要将代码包装在不安全块中。我认为你已经这样做了。

我在_wstrdate上找到的信息在代码示例中有这个:

  

//注意:不推荐使用_strdate;考虑使用_strdate_s代替

.NET Framework Equivalent 部分提供了System::DateTime::Parse的链接,因此您可以通过尝试获得良好的结果。

希望这有帮助。