carbide下编译的奇怪问题

top_spitfire 2009-04-22 10:55:20
我在vs下的写的一个代码,导入到carbide下编译,出现了一个错误,提示某一个dll(自己写的)中的一个函数没有找到,如果在主程序中不调用该函数编译没有问题,在该dll中我新添加函数,然后在主程序中调用,也会出现上述错误。

原以为是mmp中“冻结”了dll,但我修改了还是不行,
也不知道是改的不对,还是有其他原因,有谁遇到过这样的情况么?
...全文
66 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
alex_hua 2009-04-22
  • 打赏
  • 举报
回复
补:
在dll开发测试阶段,在mmp中加上“exportunfrozen”关键字,不用冻结~
alex_hua 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 top_spitfire 的帖子:]
我在vs下的写的一个代码,导入到carbide下编译,出现了一个错误,提示某一个dll(自己写的)中的一个函数没有找到,如果在主程序中不调用该函数编译没有问题,在该dll中我新添加函数,然后在主程序中调用,也会出现上述错误。
[/Quote]

一个比较好的解决方法:

定义抽象接口,在dll中用类实现全部或者部分接口,然后导出一个类对象的全局创建方法,该方法返回抽象接口父类。
在需使用该dll的程序中,使用动态装载dll,生成抽象类句柄,然后就可以通过抽象接口,利用虚函数机制调用实现类中的方法。

(这种方法可以避免当dll/lib更新时,使用该dll的其他程序在编译阶段也需更新链接库)
victory_zq 2009-04-22
  • 打赏
  • 举报
回复
出现什么错误了啊?link错误?
btsy2000 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dyw 的回复:]
检查该函数的声明/实现前是否定义有IMPORT_C/EXPORT_C,没有的话加上。然后删除.def文件,再次冻结、编译。

[/Quote]

这是最常规做法,没理由这样用了还不行
hylove9494 2009-04-22
  • 打赏
  • 举报
回复
sf
漁_夫 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 alex_hua 的回复:]
引用楼主 top_spitfire 的帖子:

我在vs下的写的一个代码,导入到carbide下编译,出现了一个错误,提示某一个dll(自己写的)中的一个函数没有找到,如果在主程序中不调用该函数编译没有问题,在该dll中我新添加函数,然后在主程序中调用,也会出现上述错误。


一个比较好的解决方法:

定义抽象接口,在dll中用类实现全部或者部分接口,然后导出一个类对象的全局创建方法,该方法返回抽象接口父类。
在需使用该dll的程序中,…
[/Quote]

支持。。。
下面的链接有关于动态加载的用法

http://blog.csdn.net/arthersophy/archive/2009/04/16/4085267.aspx

不过考虑到可能改动会很大,所以建议利用四楼DYW大哥的方法:

检查该函数的声明/实现前是否定义有IMPORT_C/EXPORT_C,没有的话加上。然后删除.def文件,再次冻结、编译。
zhj8727 2009-04-22
  • 打赏
  • 举报
回复
uping
dyw 2009-04-22
  • 打赏
  • 举报
回复
检查该函数的声明/实现前是否定义有IMPORT_C/EXPORT_C,没有的话加上。然后删除.def文件,再次冻结、编译。

3,120

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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