在C++中怎么动态调用第三方dll中的函数
在C++中如何动态调用第三方dll中的函数啊
一个第三方的dll,没有lib,有一个函数test,接受三个参数
第一个 字符串a 作为返回
第二个0
第三个 字符串c,是一个文件的全路径
这个函数的作用就是读取这个文件,处理后传给a返回
我大概知道 LoadLibrary 加载dll,
GetProcAddress 获取 函数test的地址
现在关键是不指导如何传参数给它。。。
求大神给个参考代码啊,谢谢了。
------解决思路----------------------
------解决思路----------------------
如果第三方向库, 又不知道函数原型定义.
如果不是C导出函数, 函数名就会暴露出参数以及返回值了.
如果是C函数, 就只能看反汇编, 看用了几个并且是哪些类型的参数, 返回值是什么. (IDA可以帮你)
------解决思路----------------------
TCHAR szBuffer[1024] = {0};
TCHAR szPath[MAX_PATH] = _T(".....");
test(szBuffer, 0, szPath);试一下
------解决思路----------------------
typedef int(*FUNA)(char*,int,char*);
------解决思路----------------------
LoadLibrary不成功,你要查看一下具体的错误信息,是不是dll本身还有一些系统依赖的呢个
------解决思路----------------------
VB:
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
(ByVal lpLibFileName As String) As Long
Public Declare Function FreeLibrary Lib "kernel32" _
(ByVal hLibModule As Long) As Long
Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As _
Long, ByVal lpProcName As String) As Long
------解决思路----------------------
建议楼主先读下这个系列的博文:http://blog.****.net/todototry/article/details/1640150
一个第三方的dll,没有lib,有一个函数test,接受三个参数
第一个 字符串a 作为返回
第二个0
第三个 字符串c,是一个文件的全路径
这个函数的作用就是读取这个文件,处理后传给a返回
我大概知道 LoadLibrary 加载dll,
GetProcAddress 获取 函数test的地址
现在关键是不指导如何传参数给它。。。
求大神给个参考代码啊,谢谢了。
------解决思路----------------------
#include <windows.h>
#include <iostream>
using namespace std;
void main()
{
typedef int(*FUNA)(int,int);
HMODULE hMod = LoadLibrary("cdll.dll");//dll路径
if (hMod)
{
FUNA addfun = (FUNA)GetProcAddress(hMod, TEXT("addfun"));//直接使用原工程函数名
if (addfun != NULL)
{
cout<<addfun(5, 4)<<endl;//传参数
}
else
{
cout<<"ERROR on GetProcAddress"<<endl;
}
FreeLibrary(hMod);
}
else
cout<<"ERROR on LoadLibrary"<<endl;
}
------解决思路----------------------
如果第三方向库, 又不知道函数原型定义.
如果不是C导出函数, 函数名就会暴露出参数以及返回值了.
如果是C函数, 就只能看反汇编, 看用了几个并且是哪些类型的参数, 返回值是什么. (IDA可以帮你)
------解决思路----------------------
TCHAR szBuffer[1024] = {0};
TCHAR szPath[MAX_PATH] = _T(".....");
test(szBuffer, 0, szPath);试一下
------解决思路----------------------
typedef int(*FUNA)(char*,int,char*);
------解决思路----------------------
LoadLibrary不成功,你要查看一下具体的错误信息,是不是dll本身还有一些系统依赖的呢个
------解决思路----------------------
VB:
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
(ByVal lpLibFileName As String) As Long
Public Declare Function FreeLibrary Lib "kernel32" _
(ByVal hLibModule As Long) As Long
Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As _
Long, ByVal lpProcName As String) As Long
------解决思路----------------------
建议楼主先读下这个系列的博文:http://blog.****.net/todototry/article/details/1640150