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//***为你的文件名,当然路径得设对,我的就是和源码在同一目录