这个问题昨天请教了一下大神,记录之。函数
1.编译dllspa
建立一个新项目,Win32控制台应用程序,这里选DLL。这样的话编译事后会自动在Debug目录下生成dll文件。3d
这样,会生成以下的目录:code
其中头文件里的第二、3个是自动生成的,源文件里的一、3个是自动生成的。blog
咱们只须要改动:ip
在DllWithClass.h里写:get
extern "C" _declspec(dllexport)//导出
float FunctionMultiply(float x, float y);
这里第一行是用于DLL导出的,第二行是你所定义的功能函数的声明it
在DllWithClass.cpp里写:io
extern "C" _declspec(dllexport) float FunctionMultiply(float x, float y) { return x*y; }
第一行对应.h里面的,注意不要打分号。而后就是定义函数体了。编译
这样编译就会生成一个实现简单乘法的dll文件。
2.调用dll
创建一个Win32控制台应用程序,这里是为了生成.exe
调用dll有三步所须要作的事情:
1>代码部分,这里面只须要改动UseDllWithClass.cpp文件
添加以下代码:
#include "..\DllWithClass\DllWithClass.h"
int _tmain(int argc, _TCHAR* argv[]) { float FunctionResult = FunctionMultiply(1.2f, 5.0f); printf("%f", FunctionResult); getchar(); return 0; }
其中对于被调用.dll文件的头文件的引用,使用了相对路径。这里有个小知识:因为. vcxproj这个文件的内容表明着.exe文件所在的目录
..\表示着返回上一目录,因此这个查找的顺序是:从.exe返回上一级目录,再打开\DllWithClass目录,找到DllWithClass.h
为了方便,也能够直接把.dll文件放在.exe所在目录下,这样就能够直接#include "DllWithClass.h"
2>打开项目属性-连接器-常规
附加库目录里加上.lib文件所在的目录,一样可使用相对路径:
若是.lib文件直接放在.exe文件目录下,这里能够不用设置(因此最方便的方式仍是把.h/.lib/.dll全放在.exe文件的目录下)
3>打开项目属性-连接器-输入
附加依赖项里加上.lib文件名
完成这些设置,就能够直接调用封装在.dll文件里的函数了。