标签:
DLL动态链接库的生成:
首先打开VS2012,新建——项目——Win32控制台应用程序(项目名称:ConsoleApplication1)——空项目
新建一个源文件source.cpp
先用控制台exe配置类型自己定义函数,并通过主函数调试
然后可以通过项目——属性——配置属性——常规——项目默认值——配置类型下
选择动态库(.dll)选项
然后点击Build,会在工程的Debug目录下生成一个DLL文件(ConsoleApplication1.dll)
extern "C" _declspec(dllexport) void myFun(); #include "iostream" using namespace std; void myFun() { cout<<"Hello world"<<endl; } int main() { myFun(); return 0; }
VS2012 DLL动态链接库的调用
首先建立一个win32控制台的空项目,自己建立一个源文件source.cpp
添加头文件include<windows.h>
定义一个函数指针类型 typedef void (*DLLFUN)();(注意返回值类型,参数顺序类型都要一样)
然后通过HINSTANCE hdll;创建一个实例句柄
hdll = LoadLibrary("xxxx.dll"); //加载动态库
【这里字符串类型是LPSTR,当是unicode字符集的时候会不行,因此要在工程--属性--常规---默认字符集:把“unicode”改成支持多字符扩展即可】
然后定义一个函数地址变量 DLLFun myFun1;
myFun1 = (DllFun)GetProcAddress(hdll,"myFun");获取动态库里面的myFun函数的入口地址
然后myFun1();调用即可
最后释放内存
FreeLiabrary(hdll);
#include"iostream" #include "windows.h" #include "time.h" using namespace std; typedef void (*DllFun)(); int main() { HINSTANCE hdll; hdll = LoadLibrary("E:\\C++DLL_LIB\\ConsoleApplication1\\Debug\\ConsoleApplication1.dll"); if(hdll == NULL) { FreeLibrary(hdll); cout<<"Dll loaded is fail..."<<endl; getchar(); return -1; } DllFun myFun1; myFun1 = (DllFun)GetProcAddress(hdll,"myFun"); if(myFun1 == NULL) { FreeLibrary(hdll); cout<<"DLLaddress loaded is fail..."<<endl; getchar(); return -1; } myFun1(); FreeLibrary(hdll); return 0; }
标签:
原文地址:http://www.cnblogs.com/mypsq/p/5060049.html