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(トークン)未解決への参照(0A000027) "extern" C "int stdcall MessageBoxW(struct HWND *、wchar_t const *、wchar_t const *、unsigned int)"(?MessageBoxW @@ $$ J216YGHPAUHWND __ @@ PB_W1 @ 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)unresolved used in the function " 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 に答える