在按下按钮后,在应用程序显示标签中的时间之后,最终导致链接器错误。
造成这种情况的代码行是:
_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
答案 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的链接,因此您可以通过尝试获得良好的结果。
希望这有帮助。