首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • Dev-Cpp问题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cyrosly
    • 等级:
    发表于:2008-05-12 20:44:06 楼主
    如何在Dev-Cpp中使用windows平台的*.dll和*.lib文件.我下了windows版的Dec-Cpp,但是它的是*.sa和*.a文件而不识别dll和lib文件.我试着改变了后缀,但还是不行.而又没有源代码或二进制文件,所以不能重新在Dev-Cpp里重编译.怎么办
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mscf
    • 等级:
    发表于:2008-05-12 20:48:401楼 得分:0
    那么麻烦,直接使用VC吧,Windows下还是它好使
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mscf
    • 等级:
    发表于:2008-05-12 20:52:192楼 得分:0
    主要是楼主说的这个东东只用来做过简单的标准C++应用,它也有类似的选项吧,看联机文档
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cyrosly
    • 等级:
    发表于:2008-05-12 20:57:453楼 得分:0
    是用VS2005的,可是太大了,而且如果想卸载又很难卸干净.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:02:374楼 得分:0
    .sa是哪里来的?dev-cpp带的?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mscf
    • 等级:
    发表于:2008-05-12 21:07:355楼 得分:0
    可以弄个VS6,以现在的机器配置跑的飞快

    印象中是.so
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cyrosly
    • 等级:
    发表于:2008-05-12 21:07:536楼 得分:0
    回L上,我的意思是使用dll和lib文件.但Dev-Cpp使用的文件格式是linux式的.不识别dll和lib文件.即使改变其文件后缀也不可以(*.dll->*.sa,*.lib->*.a)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cyrosly
    • 等级:
    发表于:2008-05-12 21:08:327楼 得分:0
    呵呵,是,是*.so
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:10:158楼 得分:0
    dev c++ call vc dll 好像是不行的
    http://www.daniweb.com/forums/thread108936.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:16:019楼 得分:0
    是呢是呢,还是用vs系列吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:59:3110楼 得分:0
    LoadLibrary/GetProcAddress行不行?试试?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mscf
    • 等级:
    发表于:2008-05-13 13:07:0111楼 得分:0
    运行时载入就有可能了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 23:02:0012楼 得分:0
    引用 11 楼 mscf 的回复:
    运行时载入就有可能了

    嗯,应该是,我想主要是导入文件的命名规则有差别
    显式连接应该可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cyrosly
    • 等级:
    发表于:2008-05-15 06:44:3813楼 得分:0
    谢谢10,11L的提醒,可是为什么在VC和DEV-CPP中得到的API地址不同啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 12:27:0214楼 得分:0
    可以通过工具将dll格式转换成.a格式的,如下:
    pexports zlib1.dll > zlib1.def
    dlltool -k -d zlib1.def -l libzlib1.a
    (注意,文件名一定要是lib*.a)
    当然如需要下pexports

    还有一种方法可以将lib格式转成.a格式的:
    1. reimp -d libmysql.lib
      // 這裡會生出一個檔案叫 libmysql.def
      // reimp 在 MingW32\bin 目錄下

    2. dlltool -k -d libmysql.def -l libmysql.a

    两种方法你试试看。当然一些工具要到网上去下。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cyrosly
    • 等级:
    发表于:2008-05-15 19:45:5215楼 得分:0
    谢谢L上的,不过用工具解决不了偶的疑问:为什么在VS2005和DEV-CPP中使用GetProcAddress取得的API函数的地址不同?难道动态连接库中的API函数地址不是确定的,而是在运行时自动分配的?不会吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-05-15 19:52:3016楼 得分:0
    引用 15 楼 Cyrosly 的回复:
    谢谢L上的,不过用工具解决不了偶的疑问:为什么在VS2005和DEV-CPP中使用GetProcAddress取得的API函数的地址不同?难道动态连接库中的API函数地址不是确定的,而是在运行时自动分配的?不会吧


    还是动态获取吧用LoadLibrary和GetProcAddress
    你不用管地址同样不同样,调用成功就可以了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-05-15 19:53:4817楼 得分:0
    顺便说一下你调用GetProcAddress的时候不是已经调用api了嘛
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cyrosly
    • 等级:
    发表于:2008-05-15 20:37:5718楼 得分:0
    我就是用的LoadLibary和GetProcAddress.我是在程序中为了验证所以随便Get了一个API
    刚才在百度了一下.好象有些明白为什么了,但还不是很确定:VC和DEV-CPP之所以得到的ADDR不同或许是因为DLL是在运行时
    应用程序根据需要将其载入内存(而载入的内存位置是不确定的,因此用GetProcAddress得到的地址也是不确定的)映射进当前进程的虚拟地址空间;虽然映射API的内存地址不同,但是对应的地址中存储的"指针地址"指向的功能确是一样的,就如同下面2个字符串指针:虽然在所分配的内存地址不同,但确具有同样的内容.不知道我的理解是否正确
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cyrosly
    • 等级:
    发表于:2008-05-15 20:41:0819楼 得分:0
    C/C++ code
    const char* src="cpp"; char* cp0=new char[3]; strcpy_s(cp0,3,src); char* cp1=new char[3]; strcpy_s(cp1,3,src);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 23:54:4820楼 得分:0
    呵呵,应该说你的理解是正确的
    不过,不是内存拷贝,而是exe或者dll在执行过程中都需要把文件中的代码映射到进程地址空间
    如果是用LoadLibrary导入,入口地址肯定是动态分配的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-05-16 09:12:0821楼 得分:0
    引用 18 楼 Cyrosly 的回复:
    我就是用的LoadLibary和GetProcAddress.我是在程序中为了验证所以随便Get了一个API
    刚才在百度了一下.好象有些明白为什么了,但还不是很确定:VC和DEV-CPP之所以得到的ADDR不同或许是因为DLL是在运行时
    应用程序根据需要将其载入内存(而载入的内存位置是不确定的,因此用GetProcAddress得到的地址也是不确定的)映射进当前进程的虚拟地址空间;虽然映射API的内存地址不同,但是对应的地址中存储的"指针地址"指向的功能确是一样的,就…


    是有这种现象,但函数指针输出的内容是不可靠的,只能保证你调用的时候会正确调用,至于值可能会有不同的.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved