VC 6.0环境如何动态调用我这个dl,往高手指导l

A.dll头文件导出函数声明如下:
开发环境VC++ 6.0

typedef void *TESTHANDLE;
extern "C" __declspec(dllexport) int __stdcall TEST_Init(TESTHANDLE *hHandle);
extern "C" __declspec(dllexport) int __stdcall TEST_Exit(TESTHANDLE hHandle);
……

现在test工程需要动态调用该 A.dll
限定**只能使用LoadLibrary("KCBPCli.dll")动态调用**方式,请问怎么动态调用上述两个函数

vc c

9个回答

LoadLibrary得到dll句柄,接下来GetProcAddress得到指针,在你程序中定义函数指针,然后直接调用
具体google下就有

lv612219
lv612219 我是查过资料的 关键在于定义对应的函数指针时,不知道针对上述我给的那两个函数对应的参数类型怎么去定义,还望直接指出来。
4 年多之前 回复

int (*func)(TESTHANDLE *);

lv612219
lv612219 现在对应的函数指针定义过了,谢大神,那接下来我想为这个函数赋值,TESTHANDLE *或TESTHANDLE我不知道怎么给它赋参数值,请大神指点下小白,谢谢
4 年多之前 回复

KCBPCLIHANDLE hHandle = 0;
加上这一行

lv612219
lv612219 拜谢,现在编译过了,等下调用试试,看看这初值能不能用了
4 年多之前 回复

//------------------------------------------------
typedef void * TESTHANDLE;
//------------------------------------------------
extern "C"
{
int (__stdcall * TEST_Init)(TESTHANDLE * hHandle);
int (__stdcall * TEST_Exit)(TESTHANDLE hHandle);
}
//------------------------------------------------
int load_my_dll(const wchar_t *filename)
{

HINSTANCE hlib;

hlib = LoadLibraryW(filename);

if(hlib != NULL)
  {
      void *hfun;

      hfun = GetProcAddress(hlib, "TEST_Init");
  memcpy(&TEST_Init, &hfun, sizeof(hfun));

      hfun = GetProcAddress(hlib, "TEST_Exit");
  memcpy(&TEST_Exit, &hfun, sizeof(hfun));

    return S_OK;
}

return E_FAILED;

}

大概这么用,你的导出函数,不知这两个吧,用法类似
传入一个 TESTHANDLE 或者它的地址
TESTHANDLE hTest=NULL;
//1)装入DLL
//2)取出函数
.//3)调用函数

TEST_Init(&hTest);
。。。。。。。。。。
TEST_Exit(hTest);
//4)释放DLL,如果多次Load ,释放后设置函数指针为NULL,DLL的HANDLE为NULL
L

我是查过资料的 关键在于定义对应的函数指针时,不知道针对上述我给的那两个函数对应的参数类型怎么去定义,还望直接指出来。

TESTHANDLE 应该是一个句柄,你需要知道你调用TEST_Init的时候,你需要传递什么进去,可能直接定义个TESTHANDLE 变量就可以了,函数内部会给这个变量赋值

lv612219
lv612219 现在的关键就是被void * 对应的这个宏给吭了,都不知道怎么给它值,我造你的方式赋个对应的TESTHANDLE 变量试试
4 年多之前 回复

KCBPCLIHANDLE hHandle;
后赋给test_init报错:
warning C4700: local variable 'hHandle' used without having been initialized

再用GetProcAddress得到函数的指针,再定义函数指针类型,再用这个类型定义变量,修改变量为真实函数指针,然后就可以直接调用了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
VC++显式(静态)调用、隐式(动态)调用及调试DLL

DLL 文件编写方法: 1、建立DLL工程 2、声明、定义要导出的函数 BOOL WINAPI InitDlg( HWND hTabctrl,TShareMem* pTshare,CRect* prc);//WINAPI 标准调用约定 void WINAPI EndDlg(); DWORD WINAPI ShowDlg(int nDlgNum); 实现部分省略,需要注意的是

VS2010与VC++6.0使用静态、动态链接库的不同

无论是VS2010,还是VC++6.0,若要使用静、动态链接库,都需要提供编译、链接、运行时所需的文件(编译阶段要使用链接库的头文件;链接阶段要使用链接库对应的头文件;对于动态链接库,在运行时还需要加载dll文件),只不过二者设置的方式不同而已。 在VS2010中编写的项目(例如dllTest),若要使用静态、动态链接库,步骤如下: 1)修改包含目录路径: 在 “属性页”对话框中展开

C++调用DLL有两种方法——静态调用和动态调用

[C++]调用DLL有两种方法——静态调用和动态调用 (一).静态调用其步骤如下: 1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下; 2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下; 3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目 录下; 4

vc++关于64位PE环境下系统system目录重定向问题

最近在做项目的时候遇到了一个头疼的问题,因为程序要在64位的PE环境下运行,但是我们的程序是32位的程序,那么问题就来了,因为我要使用diskpart来操作磁盘,于是我就用system("diskpart  /s script.txt"),结果屏幕一闪而过,发现脚本里的内容并没有执行,我擦嘞,这啥情况,于是我换ShellExecute/ShellExecuteEx,WinExec,CreatePr

VC6.0环境设置说明

VC环境设置说明   所谓:“工欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 先来看一下VC的处理流程,大致分为两步:编译和连接。源文件通过编译生成了.obj文件;所有.obj文件和.lib文件通过连接生成.exe文件或.dll文件。 编译参数的设置。主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这

在VC6.0环境下配置glut.h文件

经历了几个小时的钻研后,我终于弄明白了应该如何在VC6.0环境下配置OpenGl类库~~~     开心ing~~~现在就和大家分享一下我的心得~~~     首先,下载OpenGL类库的常用文件,配置应用环境。     Windows环境下的GLUT下载地址:(大小约为150k)     http://www.opengl.org/resources/libraries/gl

VC++6.0“这个文件已在另一编辑器中打开”的解决方法

在使用VC6 Dialog工程时,要打开对话框资源时,遇到过几次“这个文件已在另一个编辑器中打开”,而资源菜单中显示载入失败。在网络上查找的解决办法,实践解决办法二很有效。 开发环境:VC++6.0中操作:打开资源问题描述:“这个文件已在另一编辑器中打开”解决方法一:实际上就是在代码编辑窗口打开了,把代码编辑窗口打开的关闭就可以了, 先点击“窗口”-“层叠”,然后就能看见rc文件了。 解决方法二:...

VC动态调用DLL的调试方法

很多初学DLL和COM编程的人都为DLL的调试方法发愁。我结合自己学习COM的体验,总结DLL程序的调试如下。         DLL是一个不可运行的程序,它必须有其它程序的加载才可运行。故要调试DLL程序,需要一个测试程序。根据测试程序的不同,我将DLL调试分三种请况。         1.测试程序有源码。         2.测试程序无源码,只有可执行(exe)文件。   

C++动态调用dll库(例子)

本例只当作练习使用哦!!!1.首先要生成一个功能简单的dll库,先新建项目–>win 32项目(比如命名为CDLL)–>dll(选中空项目)–>完成。 2.新建一个头文件,命名为dllgenerator.h,完成如下代码:#ifndef __CDLL_H__ #define __CDLL_H__ extern "C" int _declspec(dllexport) add(int x, int

(亲测成功)openGL+vc+6.0环境搭建-OpenGL入门学习——写给想用计算机画图的朋友

启动VC 6,新建一个Win32 Console Application 1、按照如下顺序选择: Project → Settings → Link选项卡 然后,在Object/library modules下面的文本框的最前面添加如下库文件内容: Opengl32.lib glut32.lib GLAUX.LIB Glu32.lib 最后,在Project Opti

DropFilesDemom

ON_WM_DROPFILES VC 6.0环境

Visual C++6.0 配置OPENGL环境

首先,下载vc++6.0 软件,再从下载

在vc++6.0中配置OpenGL环境

OpenGL入门学习——写给想用计算机画图的朋友 OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。 1、与C语言紧密结合。 OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。 2、强大的可移植性。

给同事建议,如何能够真正学习成为Oracle高手?

前段时间,在公司大会议室,看到同事D在阅读《Oracle高效设计》一书,鼓励D说:“你知道吗?公司的H同事就是学懂了这本书后,在Oracle技术方面有了一个大的突破。如果你学会贯通了这本书,可以说在外面10个开发Oracle的开发人员,你能够赢一半!”。过了一两天,还在公司大会议室,还是遇到同事D,问起书看得怎么样,听到D的回答是:“觉得不是很能看下去,看起来吃力,不太理解:(”。我接着问D,

最长递增子序列的问题----两个经典题目:合唱队和Redraiment走法(简单动态规划)

这两个题目本质都是求最长递增子序列问题,本质解法都是动态规划:

更方便地动态调用DLL导出函数(VC++)

Submitted by 李马 您可以任意转载这篇文章,但请在转载时注明原始链接和作者,谢谢。 在一般情况下,动态调用DLL导出函数的方法是: 用typedef为目标函数定义函数指针类型。用GetProcAddress获取函数指针。用函数指针进行调用。 但是,如果要调用的函数太多的话,这个方法难免流于繁琐——有太多的typedef、太多的GetProcAddress和太多的函数指针

在VC6.0中多线程编程示例(带同步信号量)

直接上代码:#include //必要的头文件,使用Windows API函数 #include int index = 0; int tickets = 100;//票数 HANDLE hMutex; //使用全局的互斥对象来保证对同一资源的互斥访问与操作这里是tickets //线程处理函数原型,形式可从MSDN中拷贝 //线程1 的入口函数 DWORD WINAPI Fun1Proc

vc6.0编译环境介绍

VC++6.0编译环境介绍 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更

MFC 程序脱离VC 在任何环境下运行的配置方法

按F5可自动生成exe。到你的debug或Release目录下去找。 要想移植到没有装VC的机器上运行,需要设定以下几个属性: 生成——配置管理器——活动解决方案配置,设置成release。 项目——属性——配置属性——常规,mfc的使用设置成在静态库中使用mfc 属性——配置属性——c/c++——代码生成——运行库:多线程(/MT)。 按以上几个步骤,在xp下生成的程序可以在任何xp机器上运行

真正实现再wine上安装VC6.0,并编译调试程序

如何在普通的wineHQ下安装可编译代码的Visual C++ 6.0

VC++6.0环境下sqlite数据库编程入门 (是该走进数据库里面了)

马上添加。

解决VC不能添加文件到工程的问题

曾经我有一个同学说它的VC软件只要选择添加文件到工程,软件就会崩溃,即停止运行,当时我就笑了,怎么可能会出现这个问题,只要你正常安装的话就不会出现这个问题了         结果之后我就遇到这个问题了,不知道什么时候我的软件也是不能选择添加文件到工程,只要选择这个,首先出来个对话框:         Windows 正在收集解决方法什么的。。。。         对此,我把我的软件全部卸载,

vc插件 visual assistant 6.0

vc插件 visual assistant 6.0 提供vc环境下的自动填充功能

华为OJ(Redraiment的走法)

描述 题目描述    Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多,不知道为什么?你能替Redraiment研究他最多走的步数吗?  样例输入62 5 1 5 4 5 样例输出3 提示Example: 6个点的高度各为 2 5 1 5 4 5 如从第1格开始走,最多为3步, 2 4 5 从第2格开始走,最多只有1步,5 而从第

VC++动态库DLL制作和调用

VC++: 新建---工程---W32 Dynamic-Link-Library 。 建源文件和def文件,加入到工程。 DEF文件内容格式: LIBRARY DLL库名                         EXPORT  函数名 函数名 VC++调用动态库: //#include "stdafx.h" #include #include

VC++6.0(带破解版助手)下载、安装 教程

VC++6.0(带破解版助手)可去网盘下载: 链接:https://pan.baidu.com/s/1i5y6Clv 密码:ste9 解压压缩包之后,目录如下: 如图最后一个文件VC++.6.0.with.SP6.ISO就是我们的VC++6.0,后缀是iso的文件是镜像文件,相当于光盘,既然是光盘当然需要光驱了,需要安装一个虚拟光驱,win10自带虚拟光驱就不用装

[转]Microsoft Platform SDK 选择及在vc++6.0中的配置

Microsoft Platform SDK 选择及在vc++6.0中的配置 转自 http://hi.baidu.com/reddragon1314/blog/item/c6782188f0090504c8fc7af8.html Windows Platform SDK

骨灰级泡妞高手白皮书之升级版

《骨灰级泡妞高手白皮书之升级版》 大多数没有异性缘的男人,并非条件不好,而只是对女人缺少足够的认识,更谈不上研究。其实很多东西不过是一层窗户纸,当别人告诉你之后,你才会一拍大腿说:这个浅显的道理,我也知道啊。但别人不说,你就会永远糊涂下去。 年龄大了之后,感觉女人其实都一样,无所谓丑的美的,性感的还是平庸的,看起来都是一堆傻乎乎赤裸裸欲望赫赫的肉而已。虽然自己已经罢手,但多年来积累的认

VC6.0创建DLL动态链接库四大要素

要成功地编辑,编译和链接一个动态链接库,应该包括以下要素:建立工程文件,使用输出说明,应用初始化函数和编制函数功能。 1.       建立工程文件 在选取类型的时候要选择“Dynamic __Link Library”或者“MFC AppWizard(DLL)”。 2.使用输出说明    对DLL要输出的函数或者变量必须进行明确的说明。方法有两种,第一种是使用扩展名为def的模块定义文件

VC调试--输出调试字符串(含示例代码)

VC调试 输出字符串 更新日期:2012-11-7 代码下载:trace.zip (请不要直接使用迅雷下载) 或者到邮箱下载: vcshare@ qq.com(密码:share88) 测试环境:vs2008+WinXP 图片预览: ━━━━━━━━━━━━━━━━━━━━━━━━ 前言     一开始学习C++时,在控制台下写程序做练习,很容易输出程序变量,所以调试很

c++ vc6.0环境sp6补丁

vc6..0总是卡住 vc sp6 中英文补丁下载地址 英文版地址: http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe 简

C++ DLL总结—静动态调用、导出类

1、 DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。 静态链接库与动态链接库的区别: (1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件

VC6.0 绿色完整版 支持win8(包括64位系统)

此版本支持64位win7/8系统,安装后使用兼容模式打开即可

如何学习C语言《高手指导》

如何学习C语言《高手指导》

我往往外我往往外我往往外

我往往外我往往外我往往外我往往外我往往外我往往外我往往外我往往外我往往外我往往外我往往外我往往外我往往外

Visual c++ 6.0配置OpenCV开发环境

 1下载OpenCV安装程序(1.0版本)。假如要将OpenCV安装到C:\Program Files\OpenCV。在安装时选择"将   \OpenCV\bin加入系统变量"。或安装完成后手动添加环境变量“C:\Program Files\OpenCV\bin”。 2.启动VC++6.0,菜单Tools->Options->Directories:先设置lib路径,选择Library f

如何成为Java高手--->转一位牛人的文章共勉,其实无论什么语言都一样!

 本人感言:    其实什么语言都一样,只要学习到 太极的境界就是"无招胜有招"!   招聘公司根据语言来招人其实是偏颇的,一个真正的软件程序员,是不会因为哪种语言而束缚手脚的,要的仅仅是灵感和创意!   让我们一起向软件的颠峰攀登吧!====我从baidu偶尔看到(不知这位仁兄是不是转帖),这是原文:作者:fireflyzgb - 高级经理 六级 10-21 17:29 很多

【华为OJ】【054-Redraiment的走法】

【华为OJ】【算法总篇章】【华为OJ】【054-Redraiment的走法】【工程下载】题目描述Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多,不知道为什么? 你能替Redraiment研究他最多走的步数吗?样例输入 6 2 5 1 5 4 5样例输出 3提示 Example: 6个点的高度各为

开花的分形树

在VC环境下,利用分形L系统生成的开花的小树<br>

二维分形树

利用L系统,在VC环境下生成分形树

VC++6.0调试篇:变量的观察--watch窗口的技巧

        接着上篇,写一下VC6的watch窗口的一些小技巧,对于调试过程是非常有帮助的。VC6年纪已经很大了,微软好像也不再支持,但是还是有很多人在用。我本人是非常喜欢它的小巧(相对vs2003,2005),占资源少,即使这样它的调试功能仍然超级强,真是不错。        好,废话到此结束,下面贴代码来说明:#include stdio.h>#include windows.

C#类库DLL配置文件

<br />                                            C#类库DLL配置文件<br />       在.NET里面,类库项目是没有相应的配置文件的,但有时候写一些公共的类库DLL,又希望有配置文件来进行配置,以适应需求变化。还是老话

TCP server Socket编程 VC++6.0

研二  wifi嗅探项目  第一阶段 数据提取与分析 #include   #include      #pragma comment(lib,"ws2_32.lib")      int main(int argc, char* argv[])   {       //一、WSAStartup函数初始化Winsock      WORD sockVersion = MAKE

MFC动态加载-调用ocx控件

MFC动态加载-调用ocx控件,这是vs2010工程源码,欢迎下载

VC 6.0 实现串口通信

MFC实现串口通信编程      在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。   实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更

win10下完美运行vc6.0安装包与教程

vc6.0的安装包、破解文件以及安装教程,完美解决win10下vc6.0不兼容的问题

VC++6.0汉化补丁

专门针对VC++6.0的一个标准汉化包!~希望大家喜欢,谢谢!~

Visual C++ 6.0如何配置文件以及无法使用配置文件(Profile)的解决方案

因为学习系统及编程的时候,涉及到要用

完全卸载VC6.0

对于无法用控制面版的

一步步教你从VC 6.0 转到 Visual Studio 编写C程序

本文用图片介绍怎样用Visual Studio 2010 一步步建立C工程 。同时对建立工程中,VS可能会遇到的问题进行了分析,如 Cannot find or open the PDB file 和程序闪退看不到结果。

立即提问
相关内容推荐