C++ 调用DLL 函数
2013-04-15 16:39
288 查看
为了使用方便,可以把一些函数(一些已实现的算法或者常用操作)打包成动态链接库(DLL)形式以供代码调用。调用DLL常用的有两种方式:隐式加载与动态加载。隐式加载将会把DLL中所有标识为_declspec(dllexport)的函数都加载,若遇到多个DLL,则一次性加载所有DLL会影响到效率,因此一般情况下使用动态加载。注意动态加载过后,需要释放加载的DLL。
下面介绍动态加载DLL的方法:
1. 新建工程:
VS2010中新建工程(工程名:DLLTest)-->Application type选择DLL。
2. 编写测试函数:
在DLLTest.cpp中,编写如下测试函数:
4. 新建工程调用DLL:
VS2010中新建工程(工程名:InvokeDll)
5. 拷贝DLLTest.dll到工程InvokeDll中。
6. 编写调用DLL代码:
在InvokeDll.cpp中,编写如下测试代码:
8. Note:
dumpbin -exports DLLTest.dll 可查看DLL中函数名,同时dumpbin -exports也可查看对应的LIB中函数名。两者都看不到函数形参
下面介绍动态加载DLL的方法:
1. 新建工程:
VS2010中新建工程(工程名:DLLTest)-->Application type选择DLL。
2. 编写测试函数:
在DLLTest.cpp中,编写如下测试函数:
// DLLTest.cpp : Defines the exported functions for the DLL application. // #include "stdafx.h" extern "C" _declspec(dllexport) int sum(int a, int b) { return a+b; }3. 编译生成DLLTest.dll.
4. 新建工程调用DLL:
VS2010中新建工程(工程名:InvokeDll)
5. 拷贝DLLTest.dll到工程InvokeDll中。
6. 编写调用DLL代码:
在InvokeDll.cpp中,编写如下测试代码:
#include <windows.h> #include <iostream> using namespace std; int main() { typedef int(*myFunc)(int a, int b); int result; int x; int y; HINSTANCE hDllInst = LoadLibrary((LPCWSTR)L"DLLTest.dll"); myFunc sumAlias = NULL; sumAlias = (myFunc)GetProcAddress(hDllInst, "sum"); cout << "Please input Number A and Number B:" << endl; cin >> x >> y; if (sumAlias) { result = sumAlias(x,y); } FreeLibrary(hDllInst); cout << "Result is: " <<result << endl; }7. 编译运行,看InvokeDll.exe能否正确执行,例如,分别输入整数5,7,返回12则调用DLL中sum成功。
8. Note:
dumpbin -exports DLLTest.dll 可查看DLL中函数名,同时dumpbin -exports也可查看对应的LIB中函数名。两者都看不到函数形参
相关文章推荐
- 在C++中调用DLL中的函数
- [转载]在C++中调用DLL中的函数
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#用委托调用C++写的dll里面的函数指针
- C#调用C++ DLL 中定义的函数
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#调用C++动态链接库之Win32dll(函数)、MFCdll(对话框)
- C# 调用Dll中非托管C++代码,函数参数的类型对照
- 在C++中调用DLL中的函数
- 在C++中调用DLL中的函数
- C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C/C++/动态链接库DLL中函数的调用约定与名称修饰
- Delphi 调用C/C++的Dll(stdcall关键字, 会导致函数名分裂. 此时函数名变成_stdadd@8)
- java调用dll.C++调用没有lib的dll中类中的函数.
- 在C++中调用DLL中的函数(3)
- 【原创】在VS2012中采用C++中调用DLL中的函数(4)
- C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C# 调用 C++ dll 函数 时传递字符串 需要注意的问题
- C#调用C++写的dll 函数传递参数问题,请有经验的人详细描述
- C# 调用 C++ dll 动态链接库中多个函数时全局变量的问题