在VC6中如何加载dll
在VC6中怎么加载dll
在VC6中怎么加载dll???
------解决方案--------------------
隐式加载或显式加载
隐式加载就是包含头文件和pragma lib文件
显式加载就是LoadLibrary和GetProcessAddress
------解决方案--------------------
隐式加载或显式加载
隐式加载就是包含头文件和pragma lib文件
显式加载就是LoadLibrary和GetProcessAddress
------解决方案--------------------
LoadLibrary加载动态库
GetProcessAddress获取动态库中的函数指针。
如
HANDLE h=LoadLibrary("mydll.dll");
if(h==0)
return;
fun=GetProcessAddress(h,"myfun");
------解决方案--------------------
去看一下VC++深入详解,不但说了怎么加载,还说了怎么自己编写dll
------解决方案--------------------
我以前留得一些说明,给你看一下
//编译加载链接库一般有3种方法
//1.编译加载静态链接库
//2.以传统的.h文件的方式编译加载动态链接库
//3.以.def文件的方式编译加载动态链接库
//还想强调一下如何用perl编译和加载c++的dll库。
/*查看工具为v++下面的Depends程序
Depends主要要看有没提供出口函数,
depends如果用来查看exe文件的话,还可以看到该exe文件都
加载了哪些dll
*/
/*
静态加载方法缺点较多,不建议使用,这里只介绍动态加载的方法
*/
/*动态加载,以一个简单的add函数为例*/
//lib.h
#ifndef LIB_H
#define LIB_H
extern "C"/*导出函数为标准C接口*/ int/*函数返回值*/ __declspec(dllexport)/*导出dll*/ add(int ,int )/*函数名称和参数类型*/;
#endif
//lib.cpp
#include "lib.h"
int add(int x, int y) {
return x+y;
}
/*以上两个文件lib.h和lib.cpp就可以编译成一个dll文件了,编译完成后用depends看一下编译后的dll是不是有
add函数的输出接口,如果有应该就是编译成功了*/
//下面我们来看一下是如何加载上面编译出来的dll的
//lib_call.cpp
#include <windows.h>
#include <stdio.h>
typedef int (*lpAddFun) (int ,int );//定义与add函数返回值和参数类型一致的函数指针类型,lpAddFun
int main(int argc, char* argv[]) {
HINSTANCE hdll;//dll句柄
hDll = LoadLibrary("test.dll");//test.dll为上面编译出来的dll名称
lpAddFun addFun;//实例化一个函数指针
if(hDll!=NULL) {//加载dll成功
addFun = (lpAddFun)GetProcAddress(hDll,"add");//导出函数获取
}
if(addFun!=NULL) {//导出函数获取成功
int result = addFun(2,3);//使用导出函数
printf("%s",result);//输出结果
}
FreeLibrary(hDll);//释放动态链接库
return 0;
}
------解决方案--------------------
C:\MSVC20\SAMPLES\win32\simpldll\LOADTEST.C
VC++2.0 MSVC20 "Microsoft Visual C++ Version 2.0" "1994 Microsoft Corporation"
http://download.csdn.net/detail/zhao4zhong1/3253384
在VC6中怎么加载dll???
------解决方案--------------------
隐式加载或显式加载
隐式加载就是包含头文件和pragma lib文件
显式加载就是LoadLibrary和GetProcessAddress
------解决方案--------------------
隐式加载或显式加载
隐式加载就是包含头文件和pragma lib文件
显式加载就是LoadLibrary和GetProcessAddress
------解决方案--------------------
LoadLibrary加载动态库
GetProcessAddress获取动态库中的函数指针。
如
HANDLE h=LoadLibrary("mydll.dll");
if(h==0)
return;
fun=GetProcessAddress(h,"myfun");
------解决方案--------------------
去看一下VC++深入详解,不但说了怎么加载,还说了怎么自己编写dll
------解决方案--------------------
我以前留得一些说明,给你看一下
//编译加载链接库一般有3种方法
//1.编译加载静态链接库
//2.以传统的.h文件的方式编译加载动态链接库
//3.以.def文件的方式编译加载动态链接库
//还想强调一下如何用perl编译和加载c++的dll库。
/*查看工具为v++下面的Depends程序
Depends主要要看有没提供出口函数,
depends如果用来查看exe文件的话,还可以看到该exe文件都
加载了哪些dll
*/
/*
静态加载方法缺点较多,不建议使用,这里只介绍动态加载的方法
*/
/*动态加载,以一个简单的add函数为例*/
//lib.h
#ifndef LIB_H
#define LIB_H
extern "C"/*导出函数为标准C接口*/ int/*函数返回值*/ __declspec(dllexport)/*导出dll*/ add(int ,int )/*函数名称和参数类型*/;
#endif
//lib.cpp
#include "lib.h"
int add(int x, int y) {
return x+y;
}
/*以上两个文件lib.h和lib.cpp就可以编译成一个dll文件了,编译完成后用depends看一下编译后的dll是不是有
add函数的输出接口,如果有应该就是编译成功了*/
//下面我们来看一下是如何加载上面编译出来的dll的
//lib_call.cpp
#include <windows.h>
#include <stdio.h>
typedef int (*lpAddFun) (int ,int );//定义与add函数返回值和参数类型一致的函数指针类型,lpAddFun
int main(int argc, char* argv[]) {
HINSTANCE hdll;//dll句柄
hDll = LoadLibrary("test.dll");//test.dll为上面编译出来的dll名称
lpAddFun addFun;//实例化一个函数指针
if(hDll!=NULL) {//加载dll成功
addFun = (lpAddFun)GetProcAddress(hDll,"add");//导出函数获取
}
if(addFun!=NULL) {//导出函数获取成功
int result = addFun(2,3);//使用导出函数
printf("%s",result);//输出结果
}
FreeLibrary(hDll);//释放动态链接库
return 0;
}
------解决方案--------------------
C:\MSVC20\SAMPLES\win32\simpldll\LOADTEST.C
VC++2.0 MSVC20 "Microsoft Visual C++ Version 2.0" "1994 Microsoft Corporation"
http://download.csdn.net/detail/zhao4zhong1/3253384