用LoadLibrary和GetProcAddress函数调用dll的代码有问题,希望高手指点(谢谢)!

wangzi163 平安 架构师  2005-04-02 02:12:01
请高手指点程序有何问题,我做了一个dll文件想用显示的方式调用,就是用LoadLibrary和GetProcAddress函数实现,可是运行总是出错。
程序代码如下:
//Dll_Test.cpp 生成Dll_Test.dll
#include "stdafx.h"
#include "Dll_Test.h"
int Max(int a, int b)
{
if(a>b)
return a;
else
return b;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

//Test_GetMax.cpp
#include "stdafx.h"
#include <stdio.h>
#include <afxwin.h>
#include <afxext.h>
#include <afxdisp.h>
#include <afxdtctl.h>
int main(int argc, char* argv[])
{
typedef int (CALLBACK* LPFNDLLFUNC)(int ,int);
HINSTANCE hDLL;
LPFNDLLFUNC lpfnDllFunc;

hDLL = LoadLibrary("Dll_Test.dll");
if (hDLL != NULL)
{
lpfnDllFunc = (LPFNDLLFUNC)GetProcAddress(hDLL, "Max");
if (!lpfnDllFunc)
{
FreeLibrary(hDLL);
}
else
{
printf("已经找到函数");
int a;
a = lpfnDllFunc(1,2);
printf("返回直:%d",a);
}
}
return 0;
}
...全文
2989 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
robot1980 2005-06-06
Ok
回复
redkit 2005-04-03
hDLL = LoadLibrary("Dll_Test.dll");
这句话你还是使用绝对路径吧!

回复
tankbattle 2005-04-03
用dumpbin.exe(vc里有)看看动态库导出的函数名被改成了什么。
回复
wangzi163 2005-04-03
其实我已经声明了,可是忘了写了,如下:
extern "C"_declspec(dllimport) int Max(int a,int b);
最后原因把callback去掉就好使了,谢谢各位!
回复
sambios 2005-04-03
你以上的代码有以下几个不妥的地方:
1)没有说明要导出什么函数。
2)缺少.def文件。
以下是更正的文件内容:
dll中的函数改为以下代码:
extern "C" __declspec(dllexport) int __stdcall Max(int a, int b)
{
if(a>b)
return a;
else
return b;
}
//以下是test.def文件内容:
EXPORTS
Max
//:~
主函数不用修改。这样就没有问题了。
回复
wellin 2005-04-02
typedef int(*AAA)(int ,int);
AAA lpfnDllFunc;
HINSTANCE hInst;
hInst = LoadLibrary("DemoDll.dll");
lpfnDllFunc = (AAA)GetProcAddress(hInst, 函数名);
lpfnDllFunc(a,b);
回复
kugou123 2005-04-02
楼主最好用.def文件导出
避免编译器更改你的导出函数的名字。
另外,如果你的函数本身没有加调用约定,那么你用typedef定义函数指针的时候,也不要加。
回复
Kudeet 2005-04-02
不要callback试试
typedef int(SQRTPROC)(int ,int);
SQRTPROC* lpfnDllFunc;
lpfnDllFunc = (SQRTPROC* )GetProcAddress(hDLL, "Max");
回复
wenxinfly 2005-04-02
上面说得有道理
不过还有你的int Max()函数是不是加上标识为导出函数的标识
回复
legendhui 2005-04-02
看看你的dll路径是否正确
回复
oyljerry 2005-04-02
保证dll在工程目录下
出错指什么错误?
回复
louifox 2005-04-02
注意Dll_Test.dll在哪个文件夹下。
回复
相关推荐
用LoadLibrary和GetProcAddress函数调用dll代码有问题
用LoadLibrary和GetProcAddress函数调用dll代码有问题希望高手指点谢谢)! 楼主 wangzi163(甲骨文) 2005-04-02 14:12:01 在 VC/MFC / 进程/线程/DLL 提问 请高手指点程序问题,我做了一个dll...
DLL中动态加载一个函数LoadLibrary和GetProcAddress使用
在项目CDP_cmd中需要调用项目CDP_dgnCalc中的类CAnalRstHelper_JTGTJ212011的函数: BOOL GetElemValuePositiveOrNegativeMy(IN OUT TElemPosition& tElemPos,OUT double& dCtrlValue, BOOL bPositive); ...
动态调用DLL. LoadLibrary和GetProcAddress
动态引入方式就是使用Windows的两个API即LoadLibrary和GetProcAddress,前者用于获得DLL的句柄,后者用于获得DLL中例程的地址,这种方式之所以被称为动态的,是因为它不需要在程序的开始处把要引入的例程全部列出,...
使用GetProcAddress从动态库中调用函数
使用GetProcAddress从动态库...时候,我们不希望获取到dll之后,显式调用里面的函数,下面就以“从User32.dll调用MessageBoxEx”的例子说明其方法。   所需资源: Vc winapi   调用流程: 分段介绍: 获...
win系统动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
方法是: LoadLibrary 函数加载动态链接库到内存, GetProcAddress函数动态获得 DLL 函数的入口地址。当一个 DLL 文件 LoadLibrary 显式加载后,在任何时刻均可以通过调用 FreeLibrary 函数显式地从内存中把它...
动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在...方法是: LoadLibrary 函数加载动态链接库到内存, GetProcAddress函数动态获得 DLL 函数的入口地址。当一个 DLL 文件...
如何调用dll中的函数VC源代码
示范如何使用 LoadLibrary(...) GetProcAddress(....)调用dll的输出函数.作者 郝汉e-mail h129203@ 关键字:dll,call,function,
如何c语言制作loadlibrary加载的dllGetProcAddress获取地址后直接使用
这里想请教纯c + winapi的形式实现一个DLL文件,然后可以直接用loadlibrary载入并调用这个DLL其中的函数。 我的编译器是TDM-GCC,编辑器是Vscode添加了编译的功能。 以上。 这里先谢过了!
动态载入DLL所需要的三个函数详解(LOADLIBRARY,GETPROCADDRESS,FREELIBRARY)
(仅供参考) 动态载入DLL所需要的三个函数详解(LOADLIBRARY,GETPROCADDRESS,FREELIBRARY) ...方法是: LoadLibrary 函数加载动态链接库到内存, GetProcAddress函数动态获得 DLL 函数的入...
C++通过LoadLibrary的方式调用C封装的dll
编写DLL代码 新建工程 新建空项目工程 点击确定。然后右键项目选择新建项。 再次选择新建项,选中C++文件,将其改为MySocketClient.c,然后选择添加。 到这里,新建工程就完成了。 然后右键项目,...
什么是动态链接库DLL?以及DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
一、DLL的概念 DLL(Dynamic Link Library),动态链接库文件,又称“应用程序拓展”,是软件文件类型,扩展名是“.dll”。在Windows中,许多应用程序并不是一个完整的可...例如:kernel32.dll中含有LoadLibrary(...
使用LoadLibrary调用DLL
引言 我见过相当多的用来说明在程序中如何使用DLL中输出的...回忆一下DLL的概念,两种方法可以使用DLL中输出的函数:一是在程序代码中简单地引用DLL中符号,这使得加载器在程序启动时隐式地加载(链接)所需的D
VS2008 C# winform 64位程序动态调用VC++ 64位DLL LoadLibrary成功 但是GetProcAddress返回值为0
如果通过 Vs MFC 中调用这个64DLL 同样的方式动态调用获取函数地址成功,就不知道C#里面为什么返回0。通过Marshal返回值为126. 64DLL是 通过VC6.0建立的程序然后vs2010自动转换的然后编译生成的64位的DLL.2008建...
GetProcAddress()函数动态调用DLL中的函数,是否必须通过extern C声明导出函数
通过GetProcAddress函数动态调用dll中的函数,是否必须通过extern "C"声明导出函数? 如题,网上搜了N多资料,一直找不到确定的答案,目前答案是“是”。 很多资料上都只是说明“如果没有 extern "...
应用篇之DLL的静态调用和动态调用
区别静态调用(static call)动态调用(dynamic call)。 静态调用         静态调用,即 Load-time Dynamic Linking。正如我们常用的配置方式,同时需要头文件、LIB...
VC++中Depends工具的使用和DLL函数的动态调用方式示例
Depends用来显示与一个可执行文件(exe或者dll)相关的依赖项(动态链接库dll),以及该exe或dll引用了这些dll中的哪些接口,同时也可以看到每个被依赖的dll中的所有导出的函数接口。 在VC6位于如下目录; 加载...
【C/C++笔记】之显式调用DLL、隐式调用DLL、查看DLL输出函数
DLL的优点 ...如果使用dll,则只在内存中加载一次,所有使用dll的进程会共享此块内存(当然,像dll中的全局变量这种东西是会被每个进程复制一份的)。 2) 不需编译的软件系统升级,若一个软件...
3.利用Win32 API调用DLL
DLL文件的调用有两种方式,第一种方式就是利用.h、.lib.dll三个文件在项目中调用动态链接库,还有一种方式就是利用Win32的API来对动态链接库进行调用 1.利用.h,.lib,.dll实现动态链接库的调用 1)编译的时候...
VS配置Qt制作的音乐播放器
在VS2013配置的Qt制作的音乐播放器,具有以下功能; 1.播放暂停音乐 2.控制音量 3.添加本地歌曲 4.换肤 5.改变播放模式
过程控制系统课程设计(锅炉汽包温度控制系统论文)
本次设计采用串级控制系统对锅炉汽包温度进行控制。 过程控制系统由过程检测、变送和控制仪表、执行装置等组成,通过各种类型的仪表完成对过程变量的检测、变送和控制,并经执行装置作用于生产过程。 串级控制系统是两只调节器串联起来工作,其中一个调节器的输出作为另一个调节器的给定值的系统。此系统改善了过程的动态特性,提高了系统控制质量,能迅速克服进入副回路的二次扰动,提高了系统的工作频率,对负荷变化的适应性较强。 串级控制系统工程应用场合如下: (1)应用于容量滞后较大的过程。 (2)应用于纯时延较大的过程。 (3)应用于扰动变化激烈而且幅度大的过程。 (4)应用于参数互相关联的过程。 (5)应用于非线性过程。 正因为串级控制系统具有上述特点,所以本次设计采用串级控制系统对锅炉汽包温度进行控制。 采用单片机作为主控制器,锅炉汽包温度为主被控对象,上水的流量为副被控对象,电磁阀为执行器,利用AD590传感器检测汽包温度,利用流量传感器检测上水流量。锅炉汽包温度串级控制系统框图如图1.1所示,系统原理图如图1.2所示。
微信公众平台开发入门
本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。 通过合理的课程设计,结合讲师多年的教学经验、微信开发经验,轻松引导初学者掌握微信公众平台开发。
ArcGIS for JavaScript
全面介绍ArcGIS for JavaScript 开发 让大家学会ArcGIS for JavaScript 开发
FFmpegAndroidDemo.zip
ffmpeg-3.3.1移植到android平台
光模块基础知识
光模块内部发射与接收的专业讲解,利于新手快速开发。
JavaEE详解-全程实战案例
肖老师这套课程:抛弃传统的知识点教学模式,采用全程案例教学模式,通过网上书城项目,把所有的JavaEE需要掌握的重要知识点都融入项目中,使学员可以掌握实用的知识,同时获得佳实践. 主要涉及内容有:多表查询、翻页、多条件查询、文件上传/下载、过滤器、监听器、AJAX、事务处理等。 采用案例教学模式,通过网上书城项目,把所有的JavaEE需要掌握的重要知识点都融入项目中
数据结构基础系列(1):数据结构和算法
数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第1部分,介绍与数据结构、程序、算法相关的概念,训练初步的数据逻辑结构表达能力,和初步的算法分析能力。 系列课程的目标是帮助学习者系统掌握数据结构课程的相关知识,具备利用这些知识分析问题、解决问题的能力。课程提供视频、课件、例程、自测、实践要求、参考解答等整套的解决方案,帮助学习者达到目标。本课是系列课程中的第1部分,具体目标包括:了解数据结构在计算机类人才培养中的重要意义、掌握数据结构的基本概念、掌握数据结构的分类、理解抽象数据类型ADT及其作用,以及初步学会算法分析的“套路”。
嵌入式工程师养成计划之——嵌入式软件工程师完全学习指南
本系列课程针对有意向学习嵌入式软件开发的童鞋,从零开始、深入浅出,内容涵盖:linux系统基础、shell、linux C编程、linux系统编程、网络编程、ARM体系结构及汇编语言、ARM裸机编程、linux系统移植、linux驱动开发等模块。分多个子课程逐步学习。 本课程是全套课程的第0部(前传),目的是讲解我们的整个视频学习体系路线图,同时也会对大家学习路线的一个指引。 本期课程共计4节课,主要回答了何为嵌入式、为何要学习嵌入式、什么人适合学嵌入式、究竟应该怎样去学嵌入式等问题。最后为大家详细介绍了我们的嵌入式软件工程师学习路线图,希望能够对大家的嵌入式学习之路有所指引。
android 登陆界面例子
android 登陆界面例子 可以直接运行的
Java基础核心技术:多线程(day16-day17)
本套Java视频完全针对初级学员,课堂实录,自发布以来,好评如潮!Java视频中注重与学生互动,讲授幽默诙谐、细致入微,覆盖Java基础所有核心知识点,同类Java视频中也是代码量大、案例多、实战性强的。同时,本Java视频教程注重技术原理剖析,深入JDK源码,辅以代码实战贯穿始终,用实践驱动理论,并辅以必要的代码练习。 通过20的课程学习,使学员掌握java核心语法、面向对象思想编程、异常处理、IO流、集合类、多线程、网络编程等。
信息安全等级保护管理办法(公通字[2007]43号)
信息安全等级保护管理办法(公通字[2007]43号)
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-04-02 02:12
社区公告
暂无公告