因公司的一套系统要加个小功能,由于没有源码,只能自己写DLL了,我现在想在一个DLL写入这个模块的操作界面(以前没有写过),所以就先写个测试程序,
我把代码补齐
//在VC6设置 Project->Project Dependencies 设置DLL 依赖test运行
//main.h
#include "windows.h"
#include "stdafx.h"
#include "resource.h"
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
extern "C" _declspec(dllexport) void ShowDlg();
//main.cpp
#include "stdafx.h"
#include "resource.h"
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
extern "C" __declspec(dllexport) void ShowDlg();
HINSTANCE hinst = NULL;
HWND hwndDLG = NULL;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hinst = (HINSTANCE)hModule;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" __declspec (dllexport) void ShowDlg()
{
hwndDLG = CreateDialog(hinst,MAKEINTRESOURCE(IDD_DIALOG_MAIN),NULL,(DLGPROC)DlgProc);
ShowWindow(hwndDLG,SW_SHOW);
}
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
return TRUE;
case WM_CLOSE:
DestroyWindow(hDlg);
hwndDLG = NULL;
return TRUE;
}
return FALSE;
}
//test.cpp 调用DLL
include <windows.h>
#include "main.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Test") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
//刚刚不小心漏掉了 补上
if (!RegisterClass (&wndclass))
{
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Test"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
return 0;
case WM_PAINT:
return 0 ;
case WM_MOUSEMOVE: // 简单设置鼠标移动消息来触发调用D
ShowDlg();
return 0;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
具体测试代码我放在附件里面了,先谢谢了
当我调用这个DLL的到处函数ShowDlg(),发现没有窗体出来,请问是怎么回事呢?
麻烦知道的大大帮忙一下,感谢不尽
[课程]FART 脱壳王!加量不加价!FART作者讲授!