Dll导出static 型变量问题????

xuxian02092213 2008-12-08 09:53:20
我在DLL中想导出一个变量,将其修饰为static类型,结果在编译的时候出现了错误。
static int   __declspec(dllexport) integer;
//错误代码为
error C2201: “integer”: 必须有外部链接才可进行导出/导入


还请那位高手指点下,谢谢
...全文
1028 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuxian02092213 2008-12-08
  • 打赏
  • 举报
回复
大体明白了,谢谢
hhyttppd 2008-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xuxian02092213 的回复:]
在DLL中有个static类型的变量,我希望dll中的值在应用程序中也可以使用。。。。

在dll中定义的一个 extern int integer;在dll中修改了这个值,在应用程序中使用这个变量,但是出现了
C/C++ code无法解析的外部符号 _integer

如果将extern除掉,则应用程序编译不会出现错误,但是integer的值为0,并非为我修改的值。。。。。还请高手指教
[/Quote]

你的用法可能不对。
比如可以这么用:

//dllA
__declspec(dllexport) int share_int = 'A';

extern "C"
__declspec( dllexport )
int do_some_thing()
{
printf("A::do_some_thing()...in %c \n", share_int);
return share_int;
}

extern "C"
__declspec( dllexport )
int change_share_int(int val)
{
int temp = share_int;
share_int = val;
return temp;
}



//client
const TCHAR* DLL_DEBUG_PATH = _T("a.dll");

#pragma comment(lib, "../debug/a.lib")

__declspec(dllimport) int share_int;

int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hDllA = LoadLibrary(DLL_DEBUG_PATH);
//HINSTANCE hDllB = LoadLibrary(DLL_B_PATH);

typedef int (*DOSOMETHINGFUNC)();
typedef int (*CHANGESHAREINTFUNC)(int);

DOSOMETHINGFUNC p_do_some_thing = (DOSOMETHINGFUNC)GetProcAddress(hDllA, "do_some_thing");
CHANGESHAREINTFUNC p_change_share_int = (CHANGESHAREINTFUNC)GetProcAddress(hDllA, ("change_share_int"));

if(!p_do_some_thing || !p_change_share_int){
printf("get func form dlla is failure.\n");
return 1;
}

p_do_some_thing();
int old_share_int = p_change_share_int(20);

printf("old share int before dll a is: %d", old_share_int);

printf("old share int before dll a is: %d", share_int);

//p_do_some_thing = (DOSOMETHINGFUNC)GetProcAddress(hDllB, ("do_some_thing"));
//p_change_share_int = (CHANGESHAREINTFUNC)GetProcAddress(hDllB, ("change_share_int"));
//if(!p_do_some_thing || !p_change_share_int){
// printf("get func form dll b is failure.\n");
// return 1;
//}

//p_do_some_thing();
//old_share_int = p_change_share_int(21);

//printf("old share int before dll b is: %d", old_share_int);

return 0;
}
hai040 2008-12-08
  • 打赏
  • 举报
回复
static的意思就是不给其它文件用
hhyttppd 2008-12-08
  • 打赏
  • 举报
回复
__declspec(dllexport) int integer;

你回忆static有什么作用就知道了。
xuxian02092213 2008-12-08
  • 打赏
  • 举报
回复
在DLL中有个static类型的变量,我希望dll中的值在应用程序中也可以使用。。。。

在dll中定义的一个 extern int integer;在dll中修改了这个值,在应用程序中使用这个变量,但是出现了
无法解析的外部符号 _integer
如果将extern除掉,则应用程序编译不会出现错误,但是integer的值为0,并非为我修改的值。。。。。还请高手指教
xuxian02092213 2008-12-08
  • 打赏
  • 举报
回复
可以解释下吗,为什么不行

还有我将static 已经除掉了,但是也不行啊。。。。。。。
hhyttppd 2008-12-08
  • 打赏
  • 举报
回复
static啊。。。。晕。。。这能行吗?
xuxian02092213 2008-12-08
  • 打赏
  • 举报
回复
还是错误啊

error C2159: 指定了一个以上的存储类
BluntBlade 2008-12-08
  • 打赏
  • 举报
回复
extern int __declspec(dllexport) integer;

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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