Rxlib - Unresolved external 的世纪谜题 !!

Mr_Kaito 2013-11-29 04:24:50
我使用BCB6,今日装上了"Rxlib"第三方控件,使用 RxRichEdit 这个VCL,
全部相关文件都改好了编译完成,就卡在因为使用 TFindDialog 这个VCL,
编译一直出现以下,我换过 RichEdit3.0 这个第三方控件也是一样的问题:
[Linker Error] Unresolved external '__fastcall Rxriched::TRxCustomRichEdit::FindTextA(const System::AnsiString, int, int, System::Set<Rxriched::TRichSearchType, 0, 3>)' referenced from D:\StarET\UNIT1.OBJ

查过资料,还查到俄国,英国网论坛,有人也是遇到这问题无法解决。
所有需要的资料都加进项目了,还是一样..
我的代码是:
    TRichSearchTypes st;
TFindDialog *cd;
int newpos;

if((cd = dynamic_cast<TFindDialog *> (Sender)) == 0)
MessageBox(NULL, "Dynamic Cast Failed!", "Find/Rep", MB_OK);
if(cd -> Options.Contains(frMatchCase))
st << Rxriched::stMatchCase;
if(cd -> Options.Contains(frWholeWord))
st << Rxriched::stWholeWord;
ifRichEdit1 -> SelLength)
RichEdit1 -> SelStart += 1;

newpos = RichEdit1 -> FindText(cd -> FindText, RichEdit1 -> SelStart,
RichEdit1 -> Text.Length(), st /* TRichSearchTypes() */); //一直是这行出错,TRichSearchTypes为第三方VCL的文件定义
if(newpos != -1)
{
RichEdit1 -> SelStart = newpos;
RichEdit1 -> SelLength = cd -> FindText.Length();
} else{
MessageBox(NULL, "End of document reached.", "Find/Rep", MB_OK);
RichEdit1 -> SelStart = 0;
}


难道这是世纪谜题...
...全文
243 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Kaito 2013-12-01
  • 打赏
  • 举报
回复
引用 22 楼 ccrun 的回复:
    switch(ByteType("你好haha吗", 5))
    {
        case mbLeadByte:
            ShowMessage("第一个字符");
            break;
        case mbTrailByte:
            ShowMessage("第二个字符");
            break;
        case mbSingleByte:
            ShowMessage("不是中文字符");
            break;
    }
妖哥厉害我懂了.. 只要判断到双字节的第二个字符就-2就行了是吧!
ccrun.com 2013-12-01
  • 打赏
  • 举报
回复
    switch(ByteType("你好haha吗", 5))
    {
        case mbLeadByte:
            ShowMessage("第一个字符");
            break;
        case mbTrailByte:
            ShowMessage("第二个字符");
            break;
        case mbSingleByte:
            ShowMessage("不是中文字符");
            break;
    }
Mr_Kaito 2013-12-01
  • 打赏
  • 举报
回复
找到了,>= 0x80,是汉字,我试试摸索后在发问。 感谢妖哥 !!
Mr_Kaito 2013-12-01
  • 打赏
  • 举报
回复
了解,所以要如何加入判断汉字和英文数字吗..... 有无这种判断字节语句? ...
Mr_Kaito 2013-12-01
  • 打赏
  • 举报
回复
这是这控件的文本格式关系吗 BCB6的RichEdit无此问题呢 ..
ccrun.com 2013-12-01
  • 打赏
  • 举报
回复
FindText不是AnsiString类型么。其中一个汉字占两个字节,一个英文字母或数字占一个字节。
Mr_Kaito 2013-12-01
  • 打赏
  • 举报
回复
感谢妖哥,已成功,稍后仔细研究。 不过遇到一个格外的问题 .. 搜寻到时候选中,以这代码: RichEdit1 -> SelLength = cd -> FindText.Length(); 可正确选中英文,但中文字会多选两个字节。 改成 RichEdit1 -> SelLength = cd -> FindText.Length()-2; 则英文会少两个字节,中文又正确选中。 该如何处理这种情形 ...
ccrun.com 2013-12-01
  • 打赏
  • 举报
回复
已发,请查收。
Mr_Kaito 2013-12-01
  • 打赏
  • 举报
回复
已将另一个邮件帐号mail给你 那个突然不能收,怎么搞得 ...
ccrun.com 2013-12-01
  • 打赏
  • 举报
回复
哦,泄特,重发了信件又被退回了。“邮差小易抱歉地通知您,不知道是什么原因,对方退信了。” 你还有其他的邮箱么?
ccrun.com 2013-12-01
  • 打赏
  • 举报
回复
没收到?被当成垃圾邮件了吧,我重发一下。
Mr_Kaito 2013-12-01
  • 打赏
  • 举报
回复
妖哥我没有收到邮件阿!! 能再寄一次吗... 或是将解决方法在此回覆让其他遇到此问题的网友学习!! 感谢妖哥 解答迷惑
ccrun.com 2013-12-01
  • 打赏
  • 举报
回复
问题的根本原因在于Windows API中对FindText的定义用到了#define,解决方法也很简单。 邮件已回复,仔细阅读readme.txt就行了。
Mr_Kaito 2013-11-29
  • 打赏
  • 举报
回复
引用 7 楼 ccrun 的回复:
把你的示例工程,和组件包的文件,一起压缩,发给我:cbfans at 163 dot com
已寄出 ChangeFile文件夹底下的 RxRichEd.hpp只把重复歧义的指向 Richedit::而已
typedef Richedit::CHARFORMAT2A  TCharFormat2;
void __fastcall GetAttributes(Richedit::CHARFORMAT2A &Format);
void __fastcall SetAttributes(Richedit::CHARFORMAT2A &Format);
void __fastcall SetAttributes(Richedit::CHARFORMAT2A &Format);
void __fastcall InitFormat(Richedit::CHARFORMAT2A &Format);
Mr_Kaito 2013-11-29
  • 打赏
  • 举报
回复
好的,稍等!
ccrun.com 2013-11-29
  • 打赏
  • 举报
回复
把你的示例工程,和组件包的文件,一起压缩,发给我:cbfans at 163 dot com
Mr_Kaito 2013-11-29
  • 打赏
  • 举报
回复
哦对,我也有这么做,但还是不行.. 我把能想到的十八般武艺都上了
ccrun.com 2013-11-29
  • 打赏
  • 举报
回复
加入到工程中,是指将需要的单元,如.cpp或.lib或其他文件,通过IDE菜单Project-->Add to project来添加。
ccrun.com 2013-11-29
  • 打赏
  • 举报
回复
汗。。。你这将文件复制到C++Builder的目录下,和加入工程是两个完全不同的概念。
加载更多回复(3)

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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