0

这是我的代码:

#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 (token) 的引用未解析 (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)

我不明白错误在哪里及其原因。如果有人可以帮我解决它,我会非常感谢:)

4

2 回答 2

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
}

我希望这会对像我这样的菜鸟有所帮助。

于 2012-07-10T14:20:35.907 回答
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
于 2012-07-10T04:30:37.100 回答