char *InputBox(char *msg);
#ifdef INPUTBOX_EXPORTS
#define INPUTBOX_API __declspec(dllexport)
#else
#define INPUTBOX_API __declspec(dllimport)
#endif
// このクラスは inputbox.dll からエクスポートされました。
class INPUTBOX_API Cinputbox {
public:
Cinputbox(void);
// TODO: メソッドをここに追加してください。
};
extern INPUTBOX_API int ninputbox;
INPUTBOX_API int fninputbox(void);
#ifdef INPUTBOX_EXPORTS
# define INPUTBOX_API extern "C" __declspec(dllexport)
#else
# define INPUTBOX_API extern "C" __declspec(dllimport)
#endif
INPUTBOX_API char *InputBox(char *msg);
typedef struct inputbox_global {
HINSTANCE hinst;
char input_buffer[256];
char prompt[256];
} *inputbox_globalptr;
inputbox_global g;
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
#include <windowsx.h> // DLL内で使用しているライブラリのヘッダ
#include "resource.h" // リソースID等の定義
#include "inputbox.h" // DLLのプロトタイプ
// 文字列関連Warningの抑制
#pragma warning ( disable : 4996 ) // VS2005 security warningのサプレス
#pragma warning ( disable : 4311 ) // '型キャスト'切り詰めのサプレス
#pragma warning ( disable : 4267 ) // 'size_t' から 'int' に変換のサプレス
#pragma warning ( disable : 4312 ) // 'LONG' からより大きい...のサプレス
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g.hinst = (HINSTANCE)hModule;
strcpy(g.input_buffer,"");
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
INPUTBOX_API char* CALLBACK InputBox(char *msg)
{
strcpy(g.prompt,msg);
if (DialogBox(g.hinst,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)InputBoxProc) == -1) {
MessageBox(NULL, "DialogBox error!", "InputBox Error", MB_OK);
strcpy(g.input_buffer,"");
}
return (g.input_buffer);
}
LRESULT CALLBACK InputBoxProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg) {
case WM_INITDIALOG:
// タイトルとプロンプトの表示
SetWindowText(hDlg,"InputBox");
SetWindowText(GetDlgItem(hDlg,IDC_STATIC1),g.prompt);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wp)) {
case IDOK:
Edit_GetText(GetDlgItem(hDlg,IDC_EDIT1),g.input_buffer, sizeof(g.input_buffer));
EndDialog(hDlg, IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, IDCANCEL);
return TRUE;
}
break;
}
return FALSE;
}
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL,"メッセージ","タイトル",0);
return 0;
}
..\..\inputbox\inputbox
#include <windows.h>
#include <stdio.h>
#include "inputbox.h"
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
char line[256];
strcpy(line,InputBox("あなたの名前は?"));
sprintf(line,"%sさん、こんにちは!",line);
MessageBox(NULL,line,"あいさつ",0);
return 0;
}
main.obj : error LNK2019: 未解決の外部シンボル __imp__InputBox@4 が関数 _WinMain@16 で参照されました。