请教:如何在vc++中加载DLL文件??? HMODULE hyourDll;hyourDll=LoadLibrary("your.dll");.........FreeLibrary(hyourDLL); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用函数LoadLibrary来达到这个目的。 首先你要知道dll中函数名称或者直接用编号,当然也可以用枚举的办法,一个一个来试接下来这样做.....typedef void (*MYPROC)(void);....void CPluginTestAppDlg::OnButton1() {// TODO: Add your control notification handler code hereHINSTANCE hinstLib = AfxLoadLibrary("plug-in\\PluginTest.dll");MYPROC ProcAdd;BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;if(hinstLib!=NULL){ProcAdd = (MYPROC)GetProcAddress(hinstLib,"Message");if (fRunTimeLinkSuccess = (ProcAdd != NULL))(ProcAdd)(); else...fFreeResult = AfxFreeLibrary(hinstLib);if(!fFreeResult)...}}更加具体的就参考msdn吧,硬头皮看完英文,就什么都会了 > zf925(天下哪来那么多高手) (2001-12-12 17:49:38) 得0分 >动态、静态方法,楼上几个老兄说的都是静态方法 不对吧,都是动态才对吧。 DLL的使用分为两种,静态导入和动态导入DLL。其中整个类的导入常采用静态的导入方法;而函数或方法的导入通常采用动态的导入方法。一.静态使用导入类的声明:1.DLL工程的声明最好为扩展MFC类型;2.在DLL中有以下类声明//MyClass.hclass AFX_EXT_CLASS CMyClass{............};3.在使用DLL的类的工程中,需要以下配置A.在Project|Setting中的Link标签页的Object/library Modules 中加入*.libB.在Tools|Options中的Directories 标签页中的 Show directories for:下面的 Include files 中增加Myclass.h的路径;Lib files中增加*.lib 和*.dll路径。C.在使用工程的代码中如下即可:#include "MyClass.h"......CMyClass MyClass;二.动态使用动态使用DLL有个前提条件,必须知道DLL中的待引用函数名,配置必须有静态使用中的B项。使用如下:HINSTANCE g_hSmppDll = NULL;typedef UINT MyFunc(char *); //DLL中的函数MyFunc *pMyFunc=NULL;g_hSmppDll =LoadLibrary("MyDll.dll"); ASSERT(g_hSmppDll );pMyFunc=(MyFunc *)(GetProcAddress( g_hSmppDll, "MyFunc"));//引号中为DLL中的函数名(*pMyFunc) ("ok"); 在于一个*.lib文件。在编译动态链接库时,VC++会为动态链接库创建一个引入库(IMPORT LIB),即*.lib。库文件中只包含一些指向外部DLL库的函数索引指针,而不是真正的代码,用于解析DLL的加载地址,并定义动态链接库和用于声明的头文件的完全路径名。然后为引入库定义一个头文件,用来声明DLL中的函数。开发人员在引用时,要配置如下:A.在Project|Setting中的Link标签页的Object/library Modules 中加入*.libB.在Tools|Options中的Directories 标签页中的 Show directories for:下面的 Include files 中增加Myclass.h的路径;Lib files中增加*.lib 和*.dll路径。这是一种常用的方法。实际上,应用程序就是通过这种方式来访问Windows 的API函数。WINDOWS为其内核动态链接库生成引入库并提供了头文件。应用程序在编译时将引入库的信息带入可执行文件中,运行时通过引入库信息访问API函数。 其实很简单,你在你的工程中FileView中对工程单击右键,选ADD Files To选择其中DLL的*.lib和*.h文件,然后把你的要用的DLL拷到你程序*.exe文件所在的目录。这样你就可以痛快地调用了,如果你不知道这个DLL有那些函数,你可把*.CPP文件也加入进去(注意是加进去,象加*.lib文件一样),这样你就能在gloab中看到这个DLL的所有函数了 请教如何自定义Syp++中显示的class名称?多方搜索未果,倾囊送分,来者有份 如何得到指定文件里指定字符?? 一个对话框(父窗口)类程序创建了一个非模态对话框(子窗口),如何在在子窗口类的成员函数中访问父窗口类中的数据成员??? 小弟愚笨:VC.Net与VC++有什么不同啊? BSTR vs _bstr_t 奇怪的问题 如何修改工程名 一个网络消息的问题 求助 为什么界面上的 dialog不刷新那???? 关于gcc 关于串口的一个实际的问题,望高手指点 有人能实现半透明效果的鼠标,要求不闪烁? 找并口编程资料
接下来这样做.....
typedef void (*MYPROC)(void);
....
void CPluginTestAppDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HINSTANCE hinstLib = AfxLoadLibrary("plug-in\\PluginTest.dll");
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;if(hinstLib!=NULL)
{
ProcAdd = (MYPROC)GetProcAddress(hinstLib,"Message");
if (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd)();
else
...fFreeResult = AfxFreeLibrary(hinstLib);
if(!fFreeResult)
...
}}更加具体的就参考msdn吧,硬头皮看完英文,就什么都会了
>动态、静态方法,楼上几个老兄说的都是静态方法 不对吧,都是动态才对吧。
静态的导入方法;而函数或方法的导入通常采用动态的导入方法。
一.静态使用
导入类的声明:
1.DLL工程的声明最好为扩展MFC类型;
2.在DLL中有以下类声明
//MyClass.h
class AFX_EXT_CLASS CMyClass
{
............};
3.在使用DLL的类的工程中,需要以下配置
A.在Project|Setting中的Link标签页的Object/library Modules 中加入*.lib
B.在Tools|Options中的Directories 标签页中的 Show directories for:下面的
Include files 中增加Myclass.h的路径;Lib files中增加*.lib 和*.dll路径。
C.在使用工程的代码中如下即可:
#include "MyClass.h"
......
CMyClass MyClass;
二.动态使用
动态使用DLL有个前提条件,必须知道DLL中的待引用函数名,配置必须有静态使用中的B项。
使用如下:
HINSTANCE g_hSmppDll = NULL;
typedef UINT MyFunc(char *); //DLL中的函数
MyFunc *pMyFunc=NULL;
g_hSmppDll =LoadLibrary("MyDll.dll");
ASSERT(g_hSmppDll );
pMyFunc=(MyFunc *)(GetProcAddress( g_hSmppDll, "MyFunc"));//引号中为DLL中的函数名
(*pMyFunc) ("ok"); 在于一个*.lib文件。在编译动态链接库时,VC++会为动态链接库创建一个引入
库(IMPORT LIB),即*.lib。库文件中只包含一些指向外部DLL库的函数索引指针,而
不是真正的代码,用于解析DLL的加载地址,并定义动态链接库和用于声明的头文件
的完全路径名。然后为引入库定义一个头文件,用来声明DLL中的函数。开发人员在引用时,
要配置如下:
A.在Project|Setting中的Link标签页的Object/library Modules 中加入*.lib
B.在Tools|Options中的Directories 标签页中的 Show directories for:下面的
Include files 中增加Myclass.h的路径;Lib files中增加*.lib 和*.dll路径。
这是一种常用的方法。实际上,应用程序就是通过这种方式来访问Windows 的API函数。
WINDOWS为其内核动态链接库生成引入库并提供了头文件。应用程序在编译时将引入
库的信息带入可执行文件中,运行时通过引入库信息访问API函数。
和*.h文件,然后把你的要用的DLL拷到你程序*.exe文件所在的目录。这样你就可以痛快地调用了,如果你不知道这个DLL有那些函数,你可把*.CPP文件也加入进去(注意是加进去,象加*.lib文件一样),这样你就能在gloab中看到这个DLL的所有函数了