您的位置:首页 > 其它

再次显式加载DLL

2015-07-11 18:54 218 查看
显示加载DLL过程比较简单 DLL文件复制到DEBUG文件下就可以了

<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);
}


风行者引领群雄者行风
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: