问一个有关__declspec(dllexport)的问题

zengkun100 2005-07-08 11:11:45
在DLL中定义了这样的一个结构体
#ifdef XMLSERIALIZATION_EXPORTS
#define XMLSERIALIZATION_API __declspec(dllexport)
#else
#define XMLSERIALIZATION_API __declspec(dllimport)
#endif

struct XMLSERIALIZATION_API layerAttSel
{
_bstr_t attQuestion;
};
结构体中的其他部分因为与问题无关,我都已经省略了。问题是:在编译这个DLL的时候出现了一个warning(C4251),大概的意思是说:
layerAttSel这个结构都export了,然而_bstr_t这个类却没有dllexport的标识,客户可能无法正常使用你的结构!

请问:
为什么会出现这个warning呢?定义一个_bstr_t*就不会有这样的问题,这是为什么?到底dllexport的意义是什么呀?
我的主要目的是在结构体中提供一个可变长度的字符,请问如果不想出现warning,该怎么修改?我不用MFC的。
...全文
456 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrlvls 2005-07-16
  • 打赏
  • 举报
回复
理论上应该不会有问题,因为在编译时,结构体的成员函数对成员变量的操作是通过定义时的偏移进行的,因此在编译后只要结构体的定义前后一致就没有问题
不过为了安全起见,你可以稍加测试
zengkun100 2005-07-16
  • 打赏
  • 举报
回复
qrlvls(空 气)
是啊!
我这个结构体中是有函数的,因为结构体的默认是公有的撒!
所以成员变量也导出了,所以那个对象成员变量就出了问题.但我认为只要客户代码有那个类型定义的头文件就不会出问题的,所以这个警告我没有去管它,不知道会不会出问题呢?
qrlvls 2005-07-14
  • 打赏
  • 举报
回复
结构体导出的情况倒是有一种,结构体中也可以声明函数,而这些函数体必须有一个实体,此时导出结构体是有必要的
bobob 2005-07-12
  • 打赏
  • 举报
回复
A base class or structure must be declared with the __declspec(dllexport) keyword if a function in a derived class is to be exported.


这是msdn的解释
个人认为,结构不用导出,没有必要
zengkun100 2005-07-12
  • 打赏
  • 举报
回复
gohappy_1999(碧水蓝天)都说了很多遍了,结构中的其他部分已经省略了,怎么老是看贴不注意呢?
qrlvls( 空 气 )说得关于指针的问题,似乎有些道理,不过我还是不怎么懂呀!
gohappy_1999 2005-07-10
  • 打赏
  • 举报
回复
结构体有必要导出吗?直接就可以用吧。
qrlvls 2005-07-09
  • 打赏
  • 举报
回复
个人认为:
指针是标准类型,不管是什么类型的指针长度都是相同的,编译器能够获知其入栈、出栈的方式
而导出时并未为_bstr_t生成任何符号链接,因此在导出时产生此警告意在提醒开发人员
不过使用时,只要用户使用相同的结构定义仍然是可以正常使用的
-----------------------------
根据上面的分析,需要修正未导出任何实体的说法,这种情况下是会导出layerAttSel符号链接的

不过我也不确认这样的分析是否正确,希望后面的兄弟能够斧正
zengkun100 2005-07-09
  • 打赏
  • 举报
回复
如果我在这个头文件中没有#include <comutil.h>,那就不是warning了,我肯定包含了撒!
这个struct肯定是有意义的,我都说了,其它与问题无关的地方我都已经省略了,就是这个公有的成员变量,因为在类的定义上加了__declspec(dllexport)了之后才有这个警告的。

还有:为什么定义一个_bstr_t* 就不会有警告,而定义一个变量就有呢?
qrlvls 2005-07-09
  • 打赏
  • 举报
回复
出现warning不是由于 __declspec(dllexport) 引起的,你需要 #include <comutil.h>,在comutil.h中才定义了 _bstr_t
这里的 struct 加上 dllexport 应该是没有意义的,因为没有导出任何实体,dllexport在这里可能会被编译器忽略

15,473

社区成员

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

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