请教如何用VC2005编译UnRar.dll

gnuljf 2008-11-02 08:35:54
WinRar官方提供了UnRar.dll的编译好的版本及其源码(http://www.rarlab.com/rar_add.htm),但是我需要对UnRar.dll中的某个函数小做修改,因此必然需要自己重新编译UnRar.dll,但是麻烦来了,这个UnRar.dll的源码我是实在弄不懂怎么进行编译,这里有一篇日志《编译UnRar.dll的体验》提到了用VC2005编译UnRar.dll的问题,但是却也不够详细,限于自己的水平问题,还不足以解决这个问题,因此厚颜到此一问。
...全文
245 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yjwffgip456 2011-07-01
生成DLL时会报这些错。怎么改。
1>archive.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Rijndael::Rijndael(void)" (??0Rijndael@@QAE@XZ),该符号在函数 "public: __thiscall CryptData::CryptData(void)" (??0CryptData@@QAE@XZ) 中被引用
1>rdwrfn.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall Rijndael::Rijndael(void)" (??0Rijndael@@QAE@XZ)
1>cmddata.obj : error LNK2019: 无法解析的外部符号 "void __cdecl InitLogOptions(char *)" (?InitLogOptions@@YAXPAD@Z),该符号在函数 "public: bool __thiscall CommandData::IsConfigEnabled(int,char * * const)" (?IsConfigEnabled@CommandData@@QAE_NHQAPAD@Z) 中被引用
1>crypt.obj : error LNK2019: 无法解析的外部符号 "public: unsigned int __thiscall Rijndael::blockDecrypt(unsigned char const *,unsigned int,unsigned char *)" (?blockDecrypt@Rijndael@@QAEIPBEIPAE@Z),该符号在函数 "public: void __thiscall CryptData::DecryptBlock(unsigned char *,unsigned int)" (?DecryptBlock@CryptData@@QAEXPAEI@Z) 中被引用
1>crypt.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall Rijndael::init(enum Rijndael::Direction,unsigned char const *,unsigned char *)" (?init@Rijndael@@QAEXW4Direction@1@PBEPAE@Z),该符号在函数 "public: void __thiscall CryptData::SetCryptKeys(char const *,unsigned char const *,bool,bool,bool)" (?SetCryptKeys@CryptData@@QAEXPBDPBE_N22@Z) 中被引用
1>dll.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall Archive::GetComment(class Array<unsigned char> *,class Array<wchar_t> *)" (?GetComment@Archive@@QAE_NPAV?$Array@E@@PAV?$Array@_W@@@Z),该符号在函数 _RAROpenArchiveEx@4 中被引用
1>extract.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall Archive::ViewComment(void)" (?ViewComment@Archive@@QAEXXZ),该符号在函数 "private: enum EXTRACT_ARC_CODE __thiscall CmdExtract::ExtractArchive(class CommandData *)" (?ExtractArchive@CmdExtract@@AAE?AW4EXTRACT_ARC_CODE@@PAVCommandData@@@Z) 中被引用
1>list.obj : error LNK2001: 无法解析的外部符号 "public: void __thiscall Archive::ViewComment(void)" (?ViewComment@Archive@@QAEXXZ)
1>list.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ToPercentUnlim(__int64,__int64)" (?ToPercentUnlim@@YAH_J0@Z),该符号在函数 "void __cdecl ListArchive(class CommandData *)" (?ListArchive@@YAXPAVCommandData@@@Z) 中被引用
1>list.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall Archive::ViewFileComment(void)" (?ViewFileComment@Archive@@QAEXXZ),该符号在函数 "void __cdecl ListArchive(class CommandData *)" (?ListArchive@@YAXPAVCommandData@@@Z) 中被引用
1>list.obj : error LNK2019: 无法解析的外部符号 "public: unsigned int __thiscall Archive::ReadCommentData(class Array<unsigned char> *,class Array<wchar_t> *)" (?ReadCommentData@Archive@@QAEIPAV?$Array@E@@PAV?$Array@_W@@@Z),该符号在函数 "void __cdecl ListNewSubHeader(class CommandData *,class Archive &,bool)" (?ListNewSubHeader@@YAXPAVCommandData@@AAVArchive@@_N@Z) 中被引用
1>rdwrfn.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ToPercent(__int64,__int64)" (?ToPercent@@YAH_J0@Z),该符号在函数 "private: void __thiscall ComprDataIO::ShowUnpRead(__int64,__int64)" (?ShowUnpRead@ComprDataIO@@AAEX_J0@Z) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall ModelPPM::ModelPPM(void)" (??0ModelPPM@@QAE@XZ),该符号在函数 "public: __thiscall Unpack::Unpack(class ComprDataIO *)" (??0Unpack@@QAE@PAVComprDataIO@@@Z) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall SubAllocator::StopSubAllocator(void)" (?StopSubAllocator@SubAllocator@@QAEXXZ),该符号在函数 "public: __thiscall SubAllocator::~SubAllocator(void)" (??1SubAllocator@@QAE@XZ) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "private: void __thiscall Unpack::InitHuff(void)" (?InitHuff@Unpack@@AAEXXZ),该符号在函数 "public: void __thiscall Unpack::Init(unsigned char *)" (?Init@Unpack@@QAEXPAE@Z) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "private: void __thiscall Unpack::OldUnpInitData(int)" (?OldUnpInitData@Unpack@@AAEXH@Z),该符号在函数 "public: void __thiscall Unpack::Init(unsigned char *)" (?Init@Unpack@@QAEXPAE@Z) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "private: void __thiscall Unpack::Unpack20(bool)" (?Unpack20@Unpack@@AAEX_N@Z),该符号在函数 "public: void __thiscall Unpack::DoUnpack(int,bool)" (?DoUnpack@Unpack@@QAEXH_N@Z) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "private: void __thiscall Unpack::Unpack15(bool)" (?Unpack15@Unpack@@AAEX_N@Z),该符号在函数 "public: void __thiscall Unpack::DoUnpack(int,bool)" (?DoUnpack@Unpack@@QAEXH_N@Z) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall ModelPPM::CleanUp(void)" (?CleanUp@ModelPPM@@QAEXXZ),该符号在函数 "private: void __thiscall Unpack::Unpack29(bool)" (?Unpack29@Unpack@@AAEX_N@Z) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "public: int __thiscall ModelPPM::DecodeChar(void)" (?DecodeChar@ModelPPM@@QAEHXZ),该符号在函数 "private: void __thiscall Unpack::Unpack29(bool)" (?Unpack29@Unpack@@AAEX_N@Z) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall ModelPPM::DecodeInit(class Unpack *,int &)" (?DecodeInit@ModelPPM@@QAE_NPAVUnpack@@AAH@Z),该符号在函数 "private: bool __thiscall Unpack::ReadTables(void)" (?ReadTables@Unpack@@AAE_NXZ) 中被引用
1>unpack.obj : error LNK2019: 无法解析的外部符号 "private: void __thiscall Unpack::UnpInitData20(int)" (?UnpInitData20@Unpack@@AAEXH@Z),该符号在函数 "private: void __thiscall Unpack::UnpInitData(int)" (?UnpInitData@Unpack@@AAEXH@Z) 中被引用
1>D:\rar\Debug\rar.dll : fatal error LNK1120: 20 个无法解析的外部命令
1>生成日志保存在“file://d:\rar\Debug\BuildLog.htm”
1>rar - 23 个错误,139 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
  • 打赏
  • 举报
回复
yjwffgip456 2011-07-01
改了放久。终于能生成库文件了。但是还是报了
1>resource.obj : warning LNK4221: 未找到公共符号;存档成员将不可访问
1>rarvmtbl.obj : warning LNK4221: 未找到公共符号;存档成员将不可访问
1>rarpch.obj : warning LNK4221: 未找到公共符号;存档成员将不可访问
1>rar.obj : warning LNK4221: 未找到公共符号;存档成员将不可访问
1>生成日志保存在“file://d:\BOOT\unrar\Debug\BuildLog.htm”
1>unrar - 0 个错误,147 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 =======
这是什么原因哟。还有就是源码里没的UNRAR.H文件。这个文件要我们自己写吗?DLL文件一直报错。求高手!!!
  • 打赏
  • 举报
回复
yjwffgip456 2011-06-29
你的DILL和 LIB 能生成了吗?我的不行。
5)定义RARDLL;UNRAR;SILENT
6)定义导出文件为dll.def
这两个地方不知道在中定义。我这里一直报有错。没声明变量和函数。
  • 打赏
  • 举报
回复
wantstudio 2011-04-11
2008-11-02 23:12:45, sys0004:

按照那个说明就可以了,我下载了最新的代码编译通过,步骤如下:

1)建立一个空的win32 dll工程
2)把.hpp和.cpp都添加到工程里
3)从工程中删除arccmt.cpp、beosea.cpp、coder.cpp、model.cpp、log.cpp、suballoc.cpp、os2ea.cpp、smallfn.cpp、unios2.cpp、unpack15.cpp、unpack20.cpp、uowners.cpp、win32acl.cpp、win32stm.cpp
4)工程取消UNICODE设置
5)定义RARDLL;UNRAR;SILENT
6)定义导出文件为dll.def
  • 打赏
  • 举报
回复
wantstudio 2011-04-11
我要看回复。
  • 打赏
  • 举报
回复
gnuljf 2008-11-03
汗死,我之前没留意到,建立的不是一个空的工程,结果被stdafx.h害死了。
给分结贴。
  • 打赏
  • 举报
回复
sys0004 2008-11-02
按照那个说明就可以了,我下载了最新的代码编译通过,步骤如下:

1)建立一个空的win32 dll工程
2)把.hpp和.cpp都添加到工程里
3)从工程中删除arccmt.cpp、beosea.cpp、coder.cpp、model.cpp、log.cpp、suballoc.cpp、os2ea.cpp、smallfn.cpp、unios2.cpp、unpack15.cpp、unpack20.cpp、uowners.cpp、win32acl.cpp、win32stm.cpp
4)工程取消UNICODE设置
5)定义RARDLL;UNRAR;SILENT
6)定义导出文件为dll.def
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
加入

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
申请成为版主
帖子事件
创建了帖子
2008-11-02 08:35
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……