DLL ++项目上的VC ++编译错误

时间:2012-07-10 04:27:24

标签: c++ dll compiler-errors

这是我的代码:

#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)

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

2 个答案:

答案 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