在C++中如何动态调用第三方dll中的函数啊

spark_li 2015-05-22 08:51:59
一个第三方的dll,没有lib,有一个函数test,接受三个参数
第一个 字符串a 作为返回
第二个0
第三个 字符串c,是一个文件的全路径

这个函数的作用就是读取这个文件,处理后传给a返回

我大概知道 LoadLibrary 加载dll,
GetProcAddress 获取 函数test的地址

现在关键是不指导如何传参数给它。。。

求大神给个参考代码啊,谢谢了。
...全文
584 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2015-10-17
  • 打赏
  • 举报
回复
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
spark_li 2015-10-17
  • 打赏
  • 举报
回复
不是dll本身的问题,用C++来 load,一点问题没有, 就是vb.net,死活不成功
paschen 2015-10-17
  • 打赏
  • 举报
回复
建议楼主先读下这个系列的博文:http://blog.csdn.net/todototry/article/details/1640150
oyljerry 2015-06-01
  • 打赏
  • 举报
回复
LoadLibrary不成功,你要查看一下具体的错误信息,是不是dll本身还有一些系统依赖的呢个
翅膀又硬了 2015-06-01
  • 打赏
  • 举报
回复
引用 4 楼 spark_li 的回复:
谢谢楼上的快速回复,好事做到底啊,我懂一些vb.net C++ c#什么的不懂啊, 这个dll奇怪,vb.net里面LoadLibrary都不成功 能不能请你帮改一下啊, 我这个dll的函数是传入三个参数,第一个是字符串,第二个0,第三个是也是字符串,对应一个文件的全路径,
typedef int(*FUNA)(char*,int,char*);
spark_li 2015-05-22
  • 打赏
  • 举报
回复
谢谢 VisualEleven , 我 typedef int(*FUNA)(int,int); 这个地方应该怎么改呀?
spark_li 2015-05-22
  • 打赏
  • 举报
回复
谢谢楼上的快速回复,好事做到底啊,我懂一些vb.net C++ c#什么的不懂啊, 这个dll奇怪,vb.net里面LoadLibrary都不成功 能不能请你帮改一下啊, 我这个dll的函数是传入三个参数,第一个是字符串,第二个0,第三个是也是字符串,对应一个文件的全路径,
Eleven 2015-05-22
  • 打赏
  • 举报
回复
TCHAR szBuffer[1024] = {0}; TCHAR szPath[MAX_PATH] = _T("....."); test(szBuffer, 0, szPath);试一下
xiaohuh421 2015-05-22
  • 打赏
  • 举报
回复
如果第三方向库, 又不知道函数原型定义. 如果不是C导出函数, 函数名就会暴露出参数以及返回值了. 如果是C函数, 就只能看反汇编, 看用了几个并且是哪些类型的参数, 返回值是什么. (IDA可以帮你)
_sunshine 2015-05-22
  • 打赏
  • 举报
回复

#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;
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧