这是我的代码:
#include "stdafx.h"
#include <Windows.h>
extern "C" int __stdcall myfunction ();
BOOL WINAPI DllMain ( HINSTANCE hin, DWORD reason, LPVOID lpvReserved );
int __stdcall myfunction ()
{
MessageBoxW(NULL,L"Question",L"Title",MB_OK);
return 0;
}
BOOL WINAPI DllMain ( HINSTANCE hin, DWORD reason, LPVOID lpvReserved )
{
return TRUE;
}
当我编译时显示这些错误:
错误LNK2028:对simbol的引用 (令牌)未解决(0A000027)“extern”C“int stdcall MessageBoxW(struct HWND *,wchar_t const *,wchar_t const *,unsigned int)“(?MessageBoxW @@ $$ J216YGHPAUHWND __ @@ PB_W1I @ Z)在函数中 “extern”C“int __stdcall myfunction(void)”(?myfunction @@ $$ J10YGHXZ)
错误LNK2019:外部符号“extern”C“int stdcall MessageBoxW(struct HWND *,wchar_t const *,wchar_t const *,unsigned int)“(?MessageBoxW @@ $$ J216YGHPAUHWND __ @@ PB_W1I @ Z)未解决用于 函数“extern”C“int __stdcall myfunction(void)” (?myfunction的@@ $$ J10YGHXZ)
我不明白错误及其原因在哪里。 如果有人可以帮我修理它,我会非常感谢:)
答案 0 :(得分:1)
谢谢大家,但问题是user32.lib。
#include "stdafx.h"
#include <Windows.h>
#pragma comment(lib,"user32.lib"); //Missing lib (No compile errors)
BOOL __stdcall DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) {
return TRUE;
}
extern "C" __declspec(dllexport) void __stdcall SomeFunction() {
MessageBoxA(NULL, "Hello", "HELLO", 0x000000L); //0x000000L = MB_OK
}
我希望这会对像我这样的新手有所帮助。
答案 1 :(得分:0)
extern "C"
需要在函数上,而不是定义:
int __stdcall myfunction ();
extern "C" int __stdcall myfunction ()
{
MessageBoxW(NULL, L"Question", L"Title", MB_OK);
return 0;
}
然而,不是将extern "C"
附加到它上面,而是将它包装在预解析器条件中:
int __stdcall myfunction ();
#ifdef __cplusplus
extern "C" {
#endif
int __stdcall myfunction ()
{
MessageBoxW(NULL, L"Question", L"Title", MB_OK);
return 0;
}
#ifdef __cplusplus
}
#endif