再次显式加载DLL
2015-07-11 18:54
218 查看
显示加载DLL过程比较简单 DLL文件复制到DEBUG文件下就可以了
DLL工程
.h
风行者引领群雄者行风
<strong><span style="color:#990000;">显示调用DLL的类比较复杂 暂时放弃</span></strong> 可以隐式调用
DLL工程
.h
#ifndef __JISUAN_0710A__ #define __JISUAN_0710A__ _declspec(dllimport) #endif #ifndef __JISUAN_0710A_EXTERN_C__ #define __JISUAN_0710A_EXTERN_C__ #endif //#include <afxwin.h> #include <Windows.h> //这样win32 DLL工程也能用WINAPI #include <stdio.h> class __JISUAN_0710A__ student //显示调用DLL的类复杂 暂时放弃 可以隐式调用 { public: void output(int x,int y); }; __JISUAN_0710A_EXTERN_C__ __JISUAN_0710A__ int add(int,int); __JISUAN_0710A_EXTERN_C__ __JISUAN_0710A__ int substract(int,int); __JISUAN_0710A_EXTERN_C__ __JISUAN_0710A__ int multi(int,int); __JISUAN_0710A_EXTERN_C__ __JISUAN_0710A__ int divide(int,int); //如果不加extern "C" ,应用程序代码GetProcAddress(hinst,"add");就要改为 // <span style="white-space:pre"> </span>GetProcAddress(hinst,"add@@YAHHH@Z");很不方便 //一共导出4个全局函数和一个类.cpp
#define __JISUAN_0710A__ _declspec(dllexport) #define __JISUAN_0710A_EXTERN_C__ extern"C" #include "jisuan.h" void student::output(int x,int y) { //返回调用者进程当前正在使用的那个窗口的句柄 HWND hwnd=::GetForegroundWindow(); //获取DC HDC hdc=::GetDC(hwnd); char buf[20]; ::memset(buf,0,20); ::sprintf_s(buf,"x=%d,y=%d",x,y); //输出坐标 ::TextOutA(hdc,0,0,buf,strlen(buf)); //释放DC ::ReleaseDC(hwnd,hdc); } int add(int a,int b) { return a+b; } int substract(int a,int b) { return a-b; } int multi(int a,int b) { //student A; //实验发现 全局函数中使用类是可以的 尽管类没有在应用程序中声明 //A.output(123,456); return a*b; } int divide(int a,int b) { if(b==0) { return 12345; } return a/b; ; }测试工程
void Ctest0710ADlg::OnBnClickedAdd() { // TODO: Add your control notification handler code here HINSTANCE hinst; hinst=::LoadLibraryA("0710A.dll"); typedef int(*ARITHMETIC)(int,int); ARITHMETIC add=(ARITHMETIC)::GetProcAddress(hinst,"add"); //返回函数地址赋给指针 if(!add) { ::AfxMessageBox("获取函数地址失败!"); return; } this->UpdateData(TRUE); this->m_Z=add(this->m_A,this->m_B); this->UpdateData(FALSE); }
风行者引领群雄者行风
相关文章推荐
- 【矩阵快速幂】ZOJ 3690 Choosing number
- 如何在android studio中导入外部包
- Xmanager注册吗
- Android 混淆代码汇总
- 星际之门(一)(凯莱定理+快速幂)
- DOM知识点归纳一
- What is the difference between static and global variables ?
- html中frameset的详细使用方法
- lightoj 1197 奇怪筛法
- SQLServer学习笔记系列11
- 谷歌宣布Android Studio将取代Eclipse
- 树莓派 常用命令
- 从CMD 连接db2 数据库
- NET中小型企业项目开发框架系列(一个)
- mongodb 创建用户
- BZOJ 1013 球形空间产生器sphere(高斯消元浮点型)
- 用C++实现最小公倍数和最大公约数
- mongodb 创建用户
- 信息系统项目管理案例分析(2)
- HashMap原理