0

VS2010Win32コンソールアプリケーションがあります。このコンソールアプリケーション内で、ウィンドウを子として別のWin32アプリにアタッチしようとしています。しかし、アプリケーションをリンクしません(コンパイルします。リンカーがAFAIKを発行するだけです)。

Error   1   error LNK2019: unresolved external symbol "long __stdcall viewproc(struct HWND__ *,unsigned int,unsigned int,long)" (?viewproc@@YGJPAUHWND__@@IIJ@Z) referenced in function "void __cdecl createFSXWindow(void)" (?createFSXWindow@@YAXXZ)  H:\Projects\VisualStudioNet2010\FSXTests\Menu Items\Menu Items\MenuItems.obj    Menu Items

Win32WindowsプロジェクトのすべてのライブラリをLinker/includeの下に追加しました。

kernel32.lib;user32.lib;gdi32.lib;winspool.lib; comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib; odbccp32.lib;%(AdditionalDependencies)

備考:明確にするために、私はウィンドウをコンソールウィンドウにアタッチしようとはしませんが、別のWin32アプリケーションをアタッチしようとします。したがって、「win32コンソールアプリにウィンドウを表示させる」ということではありません。

次のようなウィンドウコードを追加すると、問題が発生します。

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>
....

// window
WNDCLASSEX wc;
wc.style = CS_HREDRAW | CS_VREDRAW ;
wc.lpfnWndProc = viewproc;

リンカーのコマンドラインを確認すると、コンソールアプリとWin32アプリの唯一の違いはSUBSYSTEM:CONSOLEvsです。SUBSYSTEM:WINDOWS

ヒントはありますか?

4

1 に答える 1

2

リンカエラーは、viewproc()関数の記述を忘れたことを示しています。

あなたはそれを宣言しました、コンパイラは幸せです、しかしそれを実装しませんでした、リンカーは不幸です。または、あなたはそれを書いたが、定義を間違ってタイプした。これは、標準ライブラリの1つに実装されている関数ではないため、提供する必要があります。ウィンドウプロシージャは、ウィンドウにカスタム動作を与えるために使用するものです。

于 2012-06-11T17:52:49.813 に答える