关于dll调用的问题?

wxpwxp 2004-08-23 12:57:29
一个程序调用dll有多少中方法呀。,,什么原理呀。。
我用的是最那个的一种方法,LoadLibrary("Co2.dll");
还有一种是regsvr32来注册的,但是听说要
用cocreateinstance()可以找到她,而且还要要注册码
我看了一个程序,如下
class __declspec( dllimport ) CLog
就调用了log.dll,不知道是怎么会事,是怎么调用的里面的
函数,还有什么其他的调用方式吗?
...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2004-08-24
  • 打赏
  • 举报
回复
regsvr32是注册组件用的
加载dll有显示和隐式两种,你用的LoadLibrary(),就是显示
还有一种隐式的,你只需把dll对应的lib文件和h文件加载你的工程就可以调用函数了
JerKii 2004-08-24
  • 打赏
  • 举报
回复
一个dll可能是一个一般的函数库文件(即里面提供了很多函数集合),也可能是一个组件
组件就需要使用regsvr32来进行注册,并且使用的时候要是用CoCreateInstance(...)来进行创建,活得该组件的接口指针后就可以通过该指针来调用该组件中的方法了!

一般的dll调用又很多方法,LoadLibrary(...)调用称之为显示调用,使用这种方法则只需一个dll文件即可!
另外一种更方便的室隐式调用,即使用该dll的lib文件和该dll的头文件(这样的话就可以避免你在程序中声明一大堆的函数原型了)
class __declspec( dllimport ) CLog
就是使用了这种方法,他直接使用了dll中的导出类CLog,但这样你必须要有CLog的头文件才行!
holyeagle 2004-08-24
  • 打赏
  • 举报
回复
动态连接;静态连接;至于regsvr32是COM的的东西,它是一种二进制的编码,保证接口的通用,可以被其他如java,vb等程序调用。
wxpwxp 2004-08-24
  • 打赏
  • 举报
回复
大家也来说说呀。
huwei001982 2004-08-24
  • 打赏
  • 举报
回复
我只知道显式链接( LoadLibrary) 和隐式链接(头文件+LIB文件)

如果DLL里面是控件, 就必须用 Regsvr32.exe注册, 所以很烦它
Mr-Chen 2004-08-24
  • 打赏
  • 举报
回复
1.隐式链接

  隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。

2.显式链接

  显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。不过实现显式链接要麻烦一些。在应用程序中用LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用FreeLibrary或MFC提供的AfxFreeLibrary释放动态链接库。

15,472

社区成员

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

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