求助一个dll导入导出变量的解决办法

LoveFan0416 2012-10-10 01:57:27
以前的项目库都是用的lib的方式,现在需要全部换成dll,但是代码需要最大限度的不变,现在问题来了,考虑使用def文件导 出符号,函数还好,基本不需要变代码就可以实现,但是库中有很多全局变量需要导出,而且都是如下方式写的:
a.c文件
const char*p = “dll”;
a.h文件
extern const char*p;
上述的a.c与a.h是框架代码,不能改。
然后调用的代码文件中包含了a.h文件(程序不光用于windows,还要用于其他平台,所以代码是完全复用的),这样就必须在用p之间显示的是用__declspec(dllimport)才能用,但是编不过去,__declspec(dllimport) const char*p 和头文件中的extern const char*p冲突了。有什么办法可以不使用__declspec(dllimport) const char*p就能使用dll中的p的。

另外,还有一个问题,就是使用dll中的p静态初始化数组,static char* arr[]={p};也不好使,为什么呢,我已经把dll导出的符号lib添加到vs工程的依赖了,应该是有P的地址了啊。唉,static char* arr[]={p};这部分代码也是IDL生成的框架,不能改啊,怎么搞呢,望不惜赐教。。
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
改成导出函数
直接返回全局变量的地址
图灵狗 2012-10-10
  • 打赏
  • 举报
回复
要不加个专门用于初始化的函数放在DLL,这样改动比较小。
LoveFan0416 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
这里(http://www.cppblog.com/suiaiguo/archive/2009/07/20/90643.html)教你如何导出变量,而且是DLL一系列的用法。
[/Quote]
首先谢谢回复。
不过我现在的问题不是怎么导出变量,看了你给的链接。
// 通过宏来控制是导入还是导出
#ifdef _DLL_SAMPLE
#define DLL_SAMPLE_API __declspec(dllexport)
#else
#define DLL_SAMPLE_API __declspec(dllimport)
#endif
这种方法同样需要修改框架头文件。而且最关键的是static char* arr[]={p};编译错误提示必须使用常量初始化,这些代码文件是IDL生成的框架,不能修改。我就是纳闷都用静态lib链接的时候没什么问题,那我现在把dll生成的lib文件链接进来,怎么static char* arr[]={p}中的p就不是常量了呢,难道lib中的p没有值,只有p指针变量自己的地址?
图灵狗 2012-10-10
  • 打赏
  • 举报
回复
这里(http://www.cppblog.com/suiaiguo/archive/2009/07/20/90643.html)教你如何导出变量,而且是DLL一系列的用法。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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