使用动态链接库

1.先创建一个动态链接库的工程
vs下,file->new project->win32 project->DLL

T.h
#ifdef MYAPI_EXPORT
	#define MYAPI _declspec(dllexport)
#else
	#define MYAPI _declspec(dllimport) 
#endif

MYAPI int fun();

#define MYAPI_EXPORT

class TestClass{
public:
	MYAPI int fun1();
	int fun2();
};


T.cpp
// T.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "T.h"

int fun()
{
	return 10;	
}

int TestClass::fun1()
{
	return 100;
}

int TestClass::fun2()
{
	return 200;
}


然后再创建一个普通的工程,在使用时include T.h就可以在程序中使用export出的函数或类了
#include "stdafx.h"
#include "T.h"//我把上面的T.h拷到这个工程下了
#include <iostream>
using namespace std;

int main()
{
	cout << fun() << endl;
	TestClass tc;
	cout << tc.fun1() << endl;
	//cout << tc.fun2() << endl; //fun2没有导出不能使用,如果将整个类导出则可以用
}


T.h
#ifdef MYAPI_EXPORT
	#define MYAPI _declspec(dllexport)
#else
	#define MYAPI _declspec(dllimport) 
#endif

MYAPI int fun();

#define MYAPI_EXPORT

class MYAPI TestClass{
public:
	int fun1();
	int fun2();
};

要让上面的能跑起来,需要将第一个工程生成的lib,dll拷贝到当前目录下,然后在Linker->Input->Additional Dependencies中加上T.lib这个引入库

2.如果想要动态加载,则需要调用LoadLibrary,在此就不讲了.

_stdcall
http://blog.csdn.net/chinabeet/article/details/3096499
remove 下划线
http://www.willus.com/mingw/yongweiwu_stdcall.html
def文件
http://www.360doc.com/content/11/0304/11/4573246_97992358.shtml
http://www.mytju.com/classcode/news_readNews.asp?newsID=345

关于_stdcall去下划线的问题总结一下
在vs2008下有2种方法
1.根据depends查看的函数名,比如说add(),
加上#pragma comment(linker,"/EXPORT:add=_add@0")就可以了,我生成的是_add@0
2.增加def文件linker->input->Module Define File加上你的def
具体内容,我的是这样的
LIBRARY   testDll2
EXPORTS
add
add1

在Qt中第一种方法同样可用,第二种需要在pro里面加上
DEF_FILE += ***.def//***为你的文件名,当然路径得设对,我的就是和源码在同一目录

你可能感兴趣的:(动态)