从dll转换成lib造成函数接口的问题

liliangbao 2010-08-13 03:42:51
在dll文件中提供了__declspec(dllimport)的函数接口,在此dll中又加载了动态库文件,被加载的动态库需要调用dll中提供的函数接口,此时是得到的数据是正确的;但将dll工程属性换成lib,将函数接口的__declspec(dllimport)前缀去掉,在加载的动态库中再去调用得到的数据就为空了。请教问题所在。此函数很简单,如下:
context* Context()
{
return ContextPtr;
}
ContextPtr是一个static变量,在被加载的动态库调用之前已经被set了。
...全文
201 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljhnew 2010-08-15
  • 打赏
  • 举报
回复
给你个生成dll的例子吧,这样简单
#ifdef OS_WINDOWS
#if defined OSRES_EXPORTS
#define OSLIB_DLL_LINK _declspec(dllexport)
#else
#define OSLIB_DLL_LINK _declspec(dllimport)
#endif
#ifdef OSLIB_STATIC_LINK
#define OSLIB_DLL
#else
#define OSLIB_DLL OSLIB_DLL_LINK
#endif
#else
#define OSLIB_DLL
#endif


OSLIB_DLL void *safe_malloc (INT32 size); /*申请空间并自动清空*/
这里OSLIB_DLL表示这个函数在dll文件中的接口被输出给其它模块用。
如果不想采用这种方式,可以在def文件中增加各个需要输出的函数名字。

所有输出的函数接口链接关系在生成的lib文件中,而执行代码在dll文件中(这两个文件应该在你的debug或release目录中,提供给其它项目用的h文件,需要自己整理好)。使用是,你在使用这个dll的项目中包含lib文件即可,运行时把dll放在运行目录或者windows系统目录即可。

为了兼容c和c++,建议对函数名字加上C的定义:
#ifdef __cplusplus
extern "C"
{
#endif

OSLIB_DLL void *safe_malloc (INT32 size); /*申请空间并自动清空*/

#ifdef __cplusplus
}
#endif
如果用静态库,在编译之前定义OSLIB_STATIC_LINK即可,生成动态库时,定义OSRES_EXPORTS,用动态库时,去掉前面两个定义
cnzdgs 2010-08-13
  • 打赏
  • 举报
回复
从你的描述中看不出问题,设置断点调试一下。
oyljerry 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liliangbao 的回复:]
thx for answer. 不过我想麻烦来了。。现在是在dll中用LoadLibrary的方式加载了好几个动态库,然后GetProcAddress得到各个对应动态库中的DllRegister的入口。修改加载的动态库是不是需要将不同的动态库的DllRegister更名,然后再当前加载他们的地方调用分别调用?此外再多问一句,用动态库dll能加载静态库么?非常感谢。
[/Quote]
dll可以link静态库,

普通dll,你直接LoadLibrary加载,然后GetProcAddress获取函数地址来访问
可以定义不同名称的函数指针来对应不同DLL的DllRegister()<<,,然后调用的时候就可以区分
liliangbao 2010-08-13
  • 打赏
  • 举报
回复
thx for answer. 不过我想麻烦来了。。现在是在dll中用LoadLibrary的方式加载了好几个动态库,然后GetProcAddress得到各个对应动态库中的DllRegister的入口。修改加载的动态库是不是需要将不同的动态库的DllRegister更名,然后再当前加载他们的地方调用分别调用?此外再多问一句,用动态库dll能加载静态库么?非常感谢。
oyljerry 2010-08-13
  • 打赏
  • 举报
回复
静态库lib也要link对应的静态库文件,把加载的动态库也改一下

15,473

社区成员

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

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