编译DLL 与 在MFC测试使用DLL

嗯,这里是简介,主题配置内可以修改,如留空则不显示

编译DLL 与 在MFC测试使用DLL

之前写的程序还只停留在单页或者是一个简单的工程上面,从没有涉及到dll等动态链接库或者静态链接库的什么东西,在实习看到别人在用,想着以后可能会用就简单学习了一下,用的很简单,所以还请多提意见。

首先创建一个dll的工程,在工程中创建一个头文件test-dll.h和一个源文件test-dll.cpp,分别如下:

test-dll.h文件:

#ifdef DLL_API
#else
#define DLL_API _declspec(dllimport)
#endif

DLL_API int add(int a,int b);
DLL_API int subtract(int a,int b);

class /* DLL_API */ Point
{
public:
	DLL_API void output(int x,int y);
	void test();
protected:
private:
};

test-dll.cpp文件:

#define DLL_API _declspec(dllexport)
#include "test-dll.h"
#include <WINDOWS.H>
#include <STDIO.H>

 int add(int a,int b)
{
	return a+b;
}

  int subtract(int a,int b)
{
	return a-b;
}

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

void Point::test()
{

}


因为省略了前面的简单步骤,这里都是包含所有的情况:

向外暴露了两个函数add和subtract,

还有类中的成员函数output,这个函数表示的是在对话框中输出一段文字。

而成员函数test没有向外暴露。


注意在源文件和头文件中使用的宏,两者是不一样的,头文件被测试工程MFC使用,因为头文件在编译的时候不编译。


测试部分:

创建一个简单的MFC程序,添加三个按钮,分别调用dll向外暴露的三个函数。

blob.png

测试程序的源程序如下:

#include "..\test_dll\test-dll.h"

/* code */

//extern int add(int a,int b);
//extern int subtract(int a,int b);

//_declspec(dllimport) int add(int a,int b);
//_declspec(dllimport) int subtract(int a,int b);

void CMfc_dll_testDlg::OnBtnAdd() 
{
	// TODO: Add your control notification handler code here
	CString str;
	str.Format("5+3=%d",add(5,3));
	MessageBox(str);

}

void CMfc_dll_testDlg::OnBtnSub() 
{
	// TODO: Add your control notification handler code here
	CString str;
	str.Format("5-3=%d",subtract(5,3));
	MessageBox(str);
}

void CMfc_dll_testDlg::OnBtnOutput() 
{
	// TODO: Add your control notification handler code here
	Point pt;
	pt.output(5,3);

}

第一行表示从外部导入头文件,即从test-dll工程导入的头文件,这样在编译的时候不会报错

在编译的时候需要将编译得到的test-dll.dll文件盒test-dll.lib文件拷贝到测试工程目录。


注意测试工程在编译的时候需要将:工程->设置->链接->对象/模块库     中添加test_dll.lib


测试工程运行正确则显示如下:


blob.png



发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Hello world. 豫ICP备16008819号-1.

Power by Z-BlogPHP  Theme by wzdaxue