网站大量收购独家精品文档,联系QQ:2885784924

Windows系统开发 全套知识介绍.ppt

  1. 1、本文档共415页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows系统开发 全套知识介绍.ppt

3、添加消息处理函数实现代码: UINT CMultithreadView::MessageFunc(WPARAM wParam,LPARAM lParam) { CString str; str.Format (线程%d运行第%d次,lParam,wParam); CClientDC dc(this); dc.TextOut(0,y,str); y=y+20; return 0; } 例2:建立对话框程序,该程序包含两个线程,一个线程向数组中写A,一个线程向数据中写B,数组中的数据分别写入对应的编辑框中 1、新建基于对话框的应用程序Sync,设计对话框如上所示界面 按钮控件ID: ID_BUTTONA ID_BUTTONB 编辑框控件ID: IDC_EDITA IDC_EDITB 2、通过ClassWizard为编辑框分别添加CEdit类控制成员变量 3、为按钮添加BN_CLICKED消息处理函数OnButtona()和OnButttonb() 4、在SyncDlg.h头文件中定义线程处理函数: UINT writeA(LPVOID lParam); UINT writeB(LPVOID lParam); 在源文件中添加实现: void Point::output(int x,int y) { HWND hwnd=GetForegroundWindow(); //获取客户前景窗口的句柄 HDC hdc=GetDC(hwnd); char buf[20]; memset(buf ,0,20); sprintf(buf,x=%d,y=%d,x,y); TextOut(hdc,0,0,buf,strlen(buf)); ReleaseDC(hwnd,hdc); } //当调用此函数时将x,y值输出到调用者的客户窗口 在客户端程序DllTest中添加按钮,ID为IDC_BTN_OUTPUT,Caption为output,双击,并添加代码: Point pt; pt.output(5,3); 编译运行 查看导出函数: 打开cmd→ cd Dll1 →cd debug →dumpbin –exports dll1.dll 查看导入函数: 打开cmd →cd dlltest →cd debug →dumpbin –imports dlltest.exe 问题:若不想将整个类导出,而只导出类中的一个函数,那么修改头文件为: class /*Dll1_API*/ Point { public: Dll1_API void output(int x,int y); void test();//为了验证其它函数没有导出 } 在源文件中添加实现: void Point::test() { } 编译 使用dumpbin –exports dll1.dll查看 C++编译器会将函数名字改编(使用dumpbin时可以看到),如果调用者使用c编写程序去调用导出函数,则可能找不到。 而上述事例中动态链接库程序和测试端程序采用相同的编译器,因此可以找到 在实际使用过程中我们希望函数名不进行改编, 在Dll1.cpp上方修改如下代码: #define Dll1_API extern “C”_declspec(dllexport) 将类的定义及相关实现注释掉(extern “C”不能导出类) 大写 使用dumpbin命令查看导出函数,可以看到和源程序中的名称完全一致,即没有进行名字改编 在测试程序中将类相关代码注释掉,并修改代码: #define Dll1_API extern “C”_declspec(dllimport) 编译运行 注:为了保证程序正确运行,应使用extern “C”(解决C++和C之间调用问题) 使用DEF文件导出 新建工程→MFC AppWizard(dll)→工程名为Dll2 →默认动态链接库 在源文件dll2.cpp中添加代码: int add(int a,int b) { return a+b; } int subtract(int a,int b) { return a-b; } 打开文本文件Dll2.def(包含exe或dll文件的声明) 必须包含的语句: LIBRARY:指出dll的名字 EXPORTS:列出被导出函数的名字 在EXPORTS下面添加代码: add subtract 编译,并使用dump

文档评论(0)

yuzongxu123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档