控制台主程序通过调用DLL显示对话框
2014-05-07 09:25
351 查看
为了实现【控制台主程序通过调用DLL显示对话框】这个效果,已经折腾两天了,今天终于有了一点眉目,特此记录。
首先描述一下,我为什么这么做。我在写一个基于C语言运用DLL来实现的程序,其他的部分都封装在了不同的DLL里,主程序就是一个win32控制台程序。现在希望做一个界面来显示,因此就希望在写一个DLL,调用win32的接口,来做一个显示窗体。
一、主程序:
注释:主程序做两件事:1、测试控制台能否显示(用了printf语句);2、调用DLL的语句(定义函数类型、得到模块句柄、得到导出函数地址、运行函数)
二、DLL程序
DLL程序为一个win32 DLL程序【一定要是win32,不可以是MFC DLL】,主要实现的功能是生成一个对话框(供主程序调用),对话框上有控件,并且有自己的消息循环。DLL程序中主要包含有:
1、在DLL程序中加个两个对话框资源,IDD_DLG_MAIN和IDD_DLG_ABOUT,定义实例句柄和对话框窗体句柄,以及声明函数。
2、定义DLL导出函数
3、定义两个对话框的消息响应函数
程序实现的过程:
先产生一个控制台(黑洞洞的cmd),然后弹出一个对话框(IDD_DLG_MAIN),点击上面的确认按钮,弹出第二个对话框(IDD_DLG_ABOUT),包含了一个Picture control和一个静态文本标签。
![](http://img.blog.csdn.net/20140507092348359?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3l3Y3h4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
原文地址:控制台主程序通过调用DLL显示对话框
首先描述一下,我为什么这么做。我在写一个基于C语言运用DLL来实现的程序,其他的部分都封装在了不同的DLL里,主程序就是一个win32控制台程序。现在希望做一个界面来显示,因此就希望在写一个DLL,调用win32的接口,来做一个显示窗体。
一、主程序:
#include <stdio.h> #include <Windows.h> int main(int argc,char* argv[]) { printf("hello world!\n"); typedef void (WINAPI* PROCFUN)(); HINSTANCE hInst1; HWND hWnd; hWnd=GetForegroundWindow(); hInst1 =LoadLibrary("DllDisplayDialog.dll"); PROCFUN _PROCFUN1=(PROCFUN)GetProcAddress (hInst1,"ShowDlg"); _PROCFUN1(); FreeLibrary(hInst1); getchar(); return 0; }
注释:主程序做两件事:1、测试控制台能否显示(用了printf语句);2、调用DLL的语句(定义函数类型、得到模块句柄、得到导出函数地址、运行函数)
二、DLL程序
DLL程序为一个win32 DLL程序【一定要是win32,不可以是MFC DLL】,主要实现的功能是生成一个对话框(供主程序调用),对话框上有控件,并且有自己的消息循环。DLL程序中主要包含有:
1、在DLL程序中加个两个对话框资源,IDD_DLG_MAIN和IDD_DLG_ABOUT,定义实例句柄和对话框窗体句柄,以及声明函数。
HINSTANCE hinst = NULL; HWND hMainDlg = NULL; HWND hAboutDlg=NULL; BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); BOOL CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); extern "C" __declspec(dllexport) void ShowDlg();
2、定义DLL导出函数
extern "C" __declspec(dllexport) void ShowDlg() { hMainDlg = (HWND)DialogBox(hinst,MAKEINTRESOURCE(IDD_DLG_MAIN), NULL,(DLGPROC)DlgProc); SetWindowTextA(hMainDlg,"my"); ShowWindow(hMainDlg, SW_SHOWNORMAL); UpdateWindow(hMainDlg); }
3、定义两个对话框的消息响应函数
/*IDD_DLG_MAIN*/ BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_COMMAND: if(LOWORD(wParam)==IDOK) hAboutDlg = (HWND)DialogBox(hinst,MAKEINTRESOURCE(IDD_DLG_ABOUT), hDlg,(DLGPROC)AboutProc); return TRUE; case WM_CLOSE: DestroyWindow(hDlg); hMainDlg = NULL; return TRUE; } return FALSE; } /*IDD_DLG_ABOUT*/ BOOL CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: return TRUE; case WM_CLOSE: EndDialog(hDlg,NULL); hMainDlg = NULL; return TRUE; case WM_COMMAND: if(LOWORD(wParam)==IDOK) SendMessage(hDlg,WM_CLOSE,0,0); return TRUE; } return FALSE; }
程序实现的过程:
先产生一个控制台(黑洞洞的cmd),然后弹出一个对话框(IDD_DLG_MAIN),点击上面的确认按钮,弹出第二个对话框(IDD_DLG_ABOUT),包含了一个Picture control和一个静态文本标签。
原文地址:控制台主程序通过调用DLL显示对话框
相关文章推荐
- 控制台主程序通过调用DLL显示对话框
- 控制台应用程序调用MFC DLL产生的对话框,解决对话框dlg.DoModal报错问题
- VC++编程通过Bluetooth API调用对话框选择蓝牙设备并显示设备信息
- 如何调用MFC dll 来显示其中的对话框
- 调用dll显示对话框
- VC++编程通过Bluetooth API调用对话框选择蓝牙设备并显示设备信息
- 创建MFC常规dll,通过导出函数显示颜色信息对话框
- bat、cmd、dos窗口:后台调用,不显示黑色的控制台dos(命令行)窗口
- [转]用DELPHI写个简单例子,调用PING命令并且取回PING结果显示MSG BOX里,要通过管道技术取
- 如何将动态链接库(C++ DLL)中的printf显示在其被调用的程序控制台上
- Golang通过syscall调用windows dll方法
- 将桌面上的文本文件的内容通过控制台显示出来1.1
- php通过控制台调用python(可传参)
- 关于如何调用mfc带资源对话框的dll的简单演示
- 在VS2010中调用COM Interop DLL操作Excel通过get_Range去获取Range时,会发生Object does not contain a definition for get_Range的错误。其原因和解决方案
- C++ 通过DLL调用C#代码
- flex利用socket和c++通信进行文件下载,解决Error #2176: 某些动作(如显示弹出窗口的动作)只能通过用户交互来调用
- exe调用dll中的对话框防资源冲突解决之道
- MFC封装接口DLL 对话框无法显示,或者位图加载不上
- .net 调用外部程序(不显示主窗口/控制台)