我爱builder

C++Builder 程序员博客

Archive for the ‘C++ Builder’ Category

哪位大虾能第一个提供一个结合StringGrid到TreeView控件的代码,愿捐出我数年收集的全部资料库交换!
邮件:trqz@sohu.com

类似这样的一个东西,看里面的图片显示的就是我要的:
http://www.tmssoftware.com/site/asg11.asp

或者类似BCB2009的IDE左边的属性框的那个,但要无限层的

你发的这个图其实就是tms里的advStringGrid或者advColumngrid 装一下就可以实现了 没必要想那么多心思去搞这个吧

用三方控件的话升级BCB不是很方便,我目前的两个6的工程因为缺少09下的控件而无法迁移

TMS控件既然提供了这样的功能,从其源码中就可以学习到这个组件的工作原理.

话说回来了,你说的1W条资料收集库,对我没有任何意义.我手头有几十万的所谓的资料收集库,里面全是网上传遍了的没有意义的那些文章,重复的占了80%以上.
资料在于精,不在于数量的多少.google上更可以搜索到几千万以上的相关资料.关键是自己能理解并吸收多少.

看来只能研究第三方控件了,给分去….

  • Filed under: C++ Builder
  •     Dll是VC6下创建的,负责usb端口监听与读写,维护Dll线程。BCB应用主线程与Dll中的子线程通过PostThreadMessage和PostMessage通讯,用SetEvent/WaitSig作同步。
        Dll子线程从端口读取数据整理后放到自定义的一个结构体中,通过PostMessage附带该数据变量指针传到BCB主线程中。
        该自定义结构体中有一个vector <string>成员变量,BCB主线程接受到消息并解引用附带的指针,该结构体中其他的变量都能正常得到,就是这个vector <string>变量无法获得。从内存查看器中能看到该指针指向的数据在BCB线程接收到消息后并未被修改过,也能看到vector的_first,_last,_end指针。但是用该指针解引用给BCB主线程中相应变量赋值时就会抛出异常"Access violation"
        并且,这段代码在VC6和VC2008上运行都很正常,主线程都能正确解析得到vector <string>,为什么在BCB中就有问题呢?
        相关代码节选如下:
        当事结构体:
    typedef struct
    {
    int ReqType;
    double Progress;
    ErrType Result;
    DevInfo DevInfo;
    MemInfo MemInfo;
    SCA SCA;
    DelFlag DelFlag;
    vector <string>    MsgList;
    }ReqData;
    (除vector外其他结构体都没什么特殊的,这些也能正确获取)

        Dll子线程中向BCB主线程发送消息:
        ReqData testData;
        ……(此处省略赋值过程)
        bRet = PostMessage(hUIHdl, WM_RESPONSE, 0, (LPARAM)&testData);
        if (bRet)
        {
            WaitForSingleObject(hReqEvent, INFINITE);
        }

        BCB主线程接收到消息:
        MESSAGE void TMainFM::OnResponse(TMessage Msg)
        {
            ReqData RecData;
            RecData = *(ReqData *)(Msg.LParam);
            SetEvent(hReqEvent);
        }

    很有可能是vector <string>实现的方式不一样, 改成new char[xxxx] 不行?

    用迭代器读出的begin()为空。下面是从内存查看器中存放这个自定义结构体变量的那一段内存:
    00A31858  0B 30 00 00 CD CD CD CD  .0..屯屯
    00A31860  66 66 66 66 66 66 E6 3F  ffffff.?
    00A31868  00 00 00 00 00 00 00 00  ……..
    00A31870  00 00 00 00 00 00 00 00  ……..
    00A31878  00 00 00 00 00 00 00 00  ……..
    00A31880  00 00 00 00 E8 03 00 00  ……..
    00A31888  01 00 00 00 00 00 00 00  ……..
    00A31890  00 00 00 00 00 00 00 00  ……..
    00A31898  28 00 00 00 0A 00 00 00  (…….
    00A318A0  00 00 00 00 00 00 00 00  ……..
    00A318A8  00 00 00 00 00 00 00 00  ……..
    00A318B0  00 00 00 00 00 00 00 00  ……..
    00A318B8  00 00 00 00 00 00 00 00  ……..
    00A318C0  CC CD CD CD 00 00 00 00  掏屯….
    00A318C8  00 00 00 00 00 00 00 00  ……..
    00A318D0  00 00 00 00 CC CD CD CD  ….掏屯
    00A318D8  C8 87 3B 00 40 8C 3B 00  葒;.@.;.
    00A318E0  48 8E 3B 00 CD CD CD CD  H.;.屯屯
    00A318E8  CD CD CD CD CD CD CD CD  屯屯屯屯
    00A318F0  CD CD CD CD CD CD CD CD  屯屯屯屯
    00A318F8  CD CD CD CD CD CD CD CD  屯屯屯屯
    00A31900  E8 03 00 00 01 00 00 00  ……..
    00A31908  CD CD CD CD CD CD CD CD  屯屯屯屯
    通过和VC中的对比,正确的MsgList.begin()地址应该是绿色标注的;但是到了BCB中就变成了红色标注的了。
    难道就是BCB和VC对vector <>的实现不一样,我的Dll也必须用BCB生成!!
    用new char[]倒是可以,但是对于存放数目未知的多条记录没有vector <string>方便啊

    把string给为AnsiString看看

    给为  ->  改为

    帮顶

    也帮顶

    一样的代码,重新在bcb下创建了DLL,运行,一切OK!
    看了可能还是vc和bcb的stl中vector定义不一致,看了看两者vector类的定义,没看出什么大的差别(类太大,也没仔细看:)),那位高人过来指点一下迷津。如果没有什么线索,明天就结贴,多谢大家的关注!

    此外,顺便提一下bcb中创建Dll的遇到的问题,只要添加.def文件,就会链接错误[ilink32 exited code c0000005],我这个def文件也没什么特殊的:
    ===========================
    LIBRARY "PCSCmdMgr"
    EXPORTS
    PCSCmdMgr_Init @1
    PCSCmdMgr_Release @2
    PCSCmdMgr_Open @3
    PCSCmdMgr_Close @4
    PCSCmdMgr_ResetEvent @5
    PCSCmdMgr_SetEvent @6
    PCSCmdMgr_WaitEvent @7
    PCSCmdMgr_EnableSMSMgr @8
    PCSCmdMgr_DisableSMSMgr @9
    PCSSMSMgr_GetAllMessages @10
    ===========================
    有人遇到过类似问题吗?

    BCB的vector与VC里的vector是两个完全不同的类,且不说BCB与VC对类的封装方式的不同,就是STL的库它们选用的也是不同的(不过C++Builder2006以后的好像一样了,STL版本是否相同就不清楚了)
    与DLL通信最好使用C语言原生数据类型(好像有称呼叫POD什么的)。

  • Filed under: C++ Builder
  • 我在 winnt.h中遇到内联函数中嵌入汇编导致失败,难道C++ builder 不能用platform开发?

    如果能,该如何设置?谢谢!!

    [C++ Error] winnt.h(588): E2211 Inline assembly not allowed in inline and template functions
    [C++ Error] winnt.h(589): E2309 Inline assembly not allowed
    [C++ Error] winnt.h(590): E2451 Undefined symbol 'mov'
    [C++ Error] winnt.h(590): E2379 Statement missing ;
    [C++ Error] winnt.h(603): E2211 Inline assembly not allowed in inline and template functions

    这是 编译报的错误

    你自己写的.h文件有错误,少{}或()的半个或少;.我说的不是winnt.h

    应该不是这儿的问题,在VC6.0中编译没有问题啊,我再查查  谢谢你!

    莫非楼主自己修改过C++Builder的Winnt.h头文件?

    应该是没问题的。

  • Filed under: C++ Builder
  • SQLite组件有一个ASQLite3Table1控件,但用ASQLite3Table1->FileByName("…")->AsStirng=XXXX,根本保存不了数据,不知怎么回事????

    还有,ASQLite3Table1->FileByName("…")->AsStirng=XXXX前面是不是需要:ASQLite3Table1->Edit();这里没有环境,你可以试一下

      TableKmk->Edit();
      TableKmk->FieldByName("gch")->AsString="005";
      TableKmk->FieldByName("gcmc")->AsString="sample 5";
      TableKmk->FieldByName("flag")->AsString ="xm";
      TableKmk->FieldByName("path")->AsString ="path";
      TableKmk->FieldByName("pwd")->AsString ="pwd";
      TableKmk->FieldByName("file")->AsString ="file";
      TableKmk->Post();

      TableKmk->Refresh();  //加了这句后就乱了,但不加这句好像仅把数据写入到内存,关掉软件再重新打开,又是乱码,

    ASQLite3Query 怎么用呢?ASQLite3Query->Active=true;打不开啊?

    这个控件貌似是有这样的问题

    没有用过
    帮顶

    SQLITE现在很红咧,看来免费的东西就是关注的人多。

      //查询数据:——————————
      ASQLite3Query1->Close();
      ASQLite3Query1->SQL->Text="SELECT * FROM emp;";
      ASQLite3Query1->Open();

    SQLite好像不如FB啊

    乱码问题是不是CharacterEncoding没有设置?CharacterEncoding有STANDARD和UTF8两种

    引用 3 楼 wenyongjie 的回复:
      TableKmk->Edit();
      TableKmk->FieldByName("gch")->AsString="005";
      TableKmk->FieldByName("gcmc")->AsString="sample 5";
      TableKmk->FieldByName("flag")->AsString ="xm";
      TableKmk->FieldByName("path")->AsString ="path";
      TableKmk->FieldByName("pwd")->AsString ="pwd";
      TableKmk->FieldByName("file")->AsString ="file";
      TableKmk->Post();

      TableKmk->Refresh();  //加了这句后…

    一样的,是字段乱了,比如说第一个字段的值跑到第二个字段里去了,第二个字段的值又不知从哪来

    但如果直接用ASQLite3DB+SQL是正常的,估计真的是ASQLite3Table这个控件有问题了

  • Filed under: C++ Builder
  • 和原来定义一样,在wtypes.h里,难道也是为了宽字符?
    这种东西也有宽字符的说法?还是什么别的意思?

    ??????????????????????????

    没看到过,

    可能是WINDOWSAPI定义的数据类型吧。
    C++都是小写的,API会定义成大写的,
    使用上有点区别!

  • Filed under: C++ Builder
  • 我的access数据库表中主键是数字如下:
    1
    2
    3
    11
    12
    13
    21
    22
    .
    .
    我想用ADOTable按这个这个顺序排列,应该怎么处理啊?

    select * from [表名] where  [主键名]%10=1 or [主键名]%10=2 or [主键名]%10=3  ORDER BY [主键名] ASC

    妖哥的方法可以

    ADOTable1->Sort="主键";

    引用 2 楼 ooip1919 的回复:
    select * from [表名] where  [主键名]%10=1 or [主键名]%10=2 or [主键名]%10=3  ORDER BY [主键名] ASC

    數字應該直接就按大小排列了. 你的這種思想應該用在字符串處理上吧~

    感谢大家,妖哥的方法可以啊!

  • Filed under: C++ Builder
  • [调用]VB中调用DLL问题

    我用VC写了个简单的DLL

    //文件:lib.h
    #ifndef LIB_H
    #define LIB_H
    int __declspec(dllexport)add(int x, int y);//声明为C编译、连接方式的外部函数
    #endif
    //文件:lib.cpp
    #include "lib.h"
    int add(int x,int y)
    {
    return x + y;
    }
    然后在VB中调用这个函数  他的返回值变的很奇怪
    例如:放1,2进去  返回回来是一个6位的数字

    你VB怎么写的?返回值用的是不是long ?

    是用long

    Private Declare Function add Lib "lib" (Int1 As Long,Int2 As Long) As Long
    Private Sub Form_Load()
      Dim a
      a = add(1,2)
    End Sub

    Private Declare Function add Lib "lib" (Int1 As Long,Int2 As Long) As Long
    Private Sub Form_Load()
      Dim a
      a = add(1,2)
      Me.Caption = a
    End Sub

    VB 那边是这样写的 

  • Filed under: C++ Builder
  • C++Builder2009的update3和update4正式发布了!!!
    有没有已经安装了的?有什么变化?

    哦?下班后回家看看

    求最新的 bds.exe 的破解文件
    我装了之后,那个 bds.exe 是 3,618 KB,原来那个 bds.exe 好像不能用了

    现在加了数字签名,破解可是不容易的了.

    没有破解文件,不能用了

    不知道官方正式的Update3安装以后版本号是多少。
    我现在用的是v12.0.3420.21218

    12.0.3420.21218

    cc共享

    这个版本我都用了好多天了,竟然是官方最终正式版?

    1. 先下载完整安装文件:
    http://www.ccrun.com/article.asp?i=1066&d=hoxsc3

    2. 然后用序列号进行安装:
    DDDK-DFPLMW-GZ5E7X-GPCP

    3. 安装完成后至少运行bds.exe一次(会出现有关许可的提示,退出即可)

    4. 下载DelphiDistiller v1.69并XX一下就好了
    http://sites.google.com/site/liteapp/files/DelphiDistiller.rar

    另外建议将旧版本完全卸载,以防新版本安装过程出错(我曾花了48个小时不停的安装卸载2009),后来发现,卸载后需要再手工删掉很多东西,包括隐藏的缓冲文件,注册表中所有与CodeGear相关的键值。

    另外为了不引起麻烦,不得不声明一下,以上所述仅出于学习的目的,如果能力允许或使用RAD2009开发商业软件,请购买正版支持正版。

    救命啊。
    我下载并安装了新的程序,但是启动的时候发现还要sn,于是用以前的那个破解过的bds.exe替换了新的bds.exe。结果程序启动不了。
    谁能告诉我怎么。
    我是在公司的机器上装。55555555

    引用 12 楼 kese 的回复:
    救命啊。
    我下载并安装了新的程序,但是启动的时候发现还要sn,于是用以前的那个破解过的bds.exe替换了新的bds.exe。结果程序启动不了。
    谁能告诉我怎么。
    我是在公司的机器上装。55555555

    请认真看9楼的回复。

    请问ccrun,有没有7zip的解压密码

    要不CC共享一个.slip

    不需要slip,用序列号安装就可以了。

    另外,部分7zip文件的解压密码:
    http://www.ccrun.com/article.asp?i=1062&d=p7n65d

    不过不知道对新版本中的文件是否有效。

    路过此帖,做个记号,回家研究

    引用 9 楼 ccrun 的回复:
    这个版本我都用了好多天了,竟然是官方最终正式版?

    1. 先下载完整安装文件:
    http://www.ccrun.com/article.asp?i=1066&d=hoxsc3

    2. 然后用序列号进行安装:
    DDDK-DFPLMW-GZ5E7X-GPCP

    3. 安装完成后至少运行bds.exe一次(会出现有关许可的提示,退出即可)

    4. 下载DelphiDistiller v1.69并XX一下就好了
    http://sites.google.com/site/liteapp/files/DelphiDistiller.rar

    这个是带了UP3的完整安装文件么。。。。我昨天把你站里的RTM版,UP1,UP2和这个都下了- -!
    然后安装RTM版,接着一个个升上了的-_-|||

    是的,是完整安装文件,我现在用的就是这个版本。安装完后自带Update3和4

    前几天就装了,后来卸了.
    update3的代码提示有bug,提示的还没update1的好.

    留记号

    引用 21 楼 hemiya 的回复:
    前几天就装了,后来卸了.
    update3的代码提示有bug,提示的还没update1的好.

    是啥样的BUG???

    安装了,不能用。

    找了几个破解都不能用。

    谁把破解好了的bds.exe共享一下?

    引用 23 楼 flymoon99 的回复:
    引用 21 楼 hemiya 的回复:
    前几天就装了,后来卸了.
    update3的代码提示有bug,提示的还没update1的好.

    是啥样的BUG???

    提示有时候不全,就像最开始没装任何补丁的一样.
    如果变量包含中文,例如:
    TButton *btn中文;
    btn中文->
    输入->后的提示,根本显示不出来TButton的函数和属性.

    如果xx后,点菜单的open有个错误,具体什么记不清了,好像是个bpl文件的地址读取错误.

    引用 25 楼 hemiya 的回复:
    引用 23 楼 flymoon99 的回复:
    引用 21 楼 hemiya 的回复:
    前几天就装了,后来卸了.
    update3的代码提示有bug,提示的还没update1的好.

    是啥样的BUG???

    提示有时候不全,就像最开始没装任何补丁的一样.
    如果变量包含中文,例如:
    TButton *btn中文;
    btn中文->
    输入->后的提示,根本显示不出来TButton的函数和属性.

    如果xx后,点菜单的open有个错误,具体什么记不清了,好像是个bpl文件的地址读取错误.

    嘿嘿,俺变量名不用中文,没事.

    mark

    有部分是错误是由于XX不完全造成的,看老毛子的什么时候出啦。嘿嘿

    的确在使用DelphiDistiller v1.69进行破解后,出现打开open菜单出现Error问题。

    请问老妖有没有这个现象?

    25楼, 我的update3代码提示没有问题。

    @29楼:不曾发现你说的情况。

    DelphiDistiller v1.69
    很多人不知道按Ctrl+Alt+L出现隐藏的破解界面
    补充一下

    v12.0.3420.21218全部230个文件下载安装完后,发现bin目录下的一些BDS.exe 生成日期是 2009/1/15 , update3不是刚刚发布吗?

    晚上回去测试一下

    密切关注中。。。

    引用 29 楼 tsk 的回复:

    的确在使用DelphiDistiller v1.69进行破解后,出现打开open菜单出现Error问题。

    请问老妖有没有这个现象?

    同样没那个情况.不过对于老妖的UP3,我弄了好几遍才装上- -!第一次,迅雷那玩意用Ctrl+C的话最大只能检测200个连接,所以没下载- -!于是死活装不上.
    接着,全部下完,第一遍只是卸载了旧的,用Windows优化大师清理了一下注册表,删除了安装目录的文件,装上后不行,给我报错..
    第2遍,重复1的步骤,搜索codegear,再删,还是不行- -.
    第3遍,重复2的步骤,到环境变量里删掉相关的东西.终于装上.
    装上又出现了传说中的那个.net引起的问题,说是RAD用到.net2.0版本中的一个KEY,但是升级之后那个KEY没了,所以报错.不过看到过一个方法,就是bds.exe改名,以前死活不起作用,这回居然可以了.- -!,然后接开开心心的写代码了,心情一好,把前几天那个winhttp.h的问题给解决了.

    再后来,没有29楼说的问题,这位老兄可以试下我的步骤,去完整地弄一遍.

    做个记号

    这些更新是干什么用的?

    做个标记回家再研究

    俄国人有一个光盘镜像下载,google搜索"[NNM-Club.ru] rad2k9.iso.torrent"就可以找到。:)

    1、安装后如果起动“CodeGear RAD Studio”,而不是单独起动“DELPHI 2009”或“C++BUILDER 20009”,会提示Borland.Vcl.Design.DbxCtrls.dll调用失败,官方有讨论说是D版引起,详情见:https://forums.codegear.com/thread.jspa?threadID=9720           

    2、安装后是HELP UPDATE 1, 自动升级程序提示有HELP UPDATE 2需要再升级。

    我还是等等吧,等2010版本出来后再尝试,呵呵。

    没有破解文件,不能用了

    UP!

    这里有全功能绿色安装版,安装即可用,无需破解。

    http://www.namipan.com/d/bcb2009.exe/4838f06dcaecc4f2626f3fcede98dfa09e4067b31183bc07

    为什么我装了好几遍,还是有那个open菜单有错误,

    注意是open菜单,不是Open Project菜单,

    而且是偶尔出现错误,不是每次都会出现。

    没有破解!

    mark.

    做个记号,好研究

    对,先做个记号,慢慢研究

    目前發現,在WINDOWS SERVER 2008 32位平台上,如果沒有打開項目的情況下直接點“open”菜單,會有內存訪問出錯的異常,但如果已打開項目或新建項目後,再點“open”就不是每次出錯了;而且前面的在線升級help update 2也沒什麼問題。

    老妖还活着?还在坛子里转?呵呵。
    好多年了啊。

    为装这个2009我也是反复还原系统啊。

    最后发现,原来破解程序竟然是:DelphiDistiller。

    DelphiDistiller的作者,和会使用的人都是不明不白地说XX一下,哈哈。

    就是不说怎么去XX,所以,我也不说。

    此外,在win08下,起动全环境时,有时会出错,说一个DLL没有(明明有的)。

    引用 52 楼 weill 的回复:
    老妖还活着?还在坛子里转?呵呵。
    好多年了啊。

    为装这个2009我也是反复还原系统啊。

    最后发现,原来破解程序竟然是:DelphiDistiller。

    DelphiDistiller的作者,和会使用的人都是不明不白地说XX一下,哈哈。

    就是不说怎么去XX,所以,我也不说。

    此外,在win08下,起动全环境时,有时会出错,说一个DLL没有(明明有的)。

    是啊,还勉强在论坛里混呢。

    另外,RAD2009我只在XP,Vista和Win7下测试过,不曾用Windows Server 2008的系统。

    mark

    标记一下

    收藏

    难怪啊,我就是在windows server 2008 win32 下安装的。打开open出现 AV 错误。

    终于解决了在 IDE 中打开open菜单出现AV错误问题,我用 3390.20513版本的BDS.exe  替换掉 3420版的 BDS.exe

    经多次测试,运行稳定。

    vista 下可用,谢谢

    妖哥急救!急救!
    急救!

    http://www.ccrun.com/article.asp?i=1062&d=p7n65d
    妖哥从你的网站下载的资源,用下面这个密码打不开.
    http://www.ccrun.com/article.asp?i=1062&d=p7n65d

    引用 17 楼 ccrun 的回复:
    另外,部分7zip文件的解压密码:
    http://www.ccrun.com/article.asp?i=1062&d=p7n65d

    不过不知道对新版本中的文件是否有效。

    搞这么复杂

    反复安装卸载v12.0.3420.21218基本没发现大问题(open菜单偶尔报错)
    就发现安装后“Vcl源文件”不见了,想查看vcl源定义老提示“**.pas”文件未发现!
    不知大家有无类似情况?

  • Filed under: C++ Builder
  • 我在使用virtualstringtree控件时,用到了它的指定单元格的edit功能,在createEditor后,进入编辑框内,但是在编辑时我想对键盘输入的字符进行过滤,不能输入类似"/,*,"等字符,该如何往下进行,希望大家多多指教,先谢了!

    一天了,没解决呢,自己顶一个

    人呢?自己再顶下

    没人来,结贴!

  • Filed under: C++ Builder
  • CodeGear RAD Studio 2009 updata3 安装 让选择setup source file才能继续安装  我用的是音乐杀手提供的精简版 是不是不行呢

    引用 1 楼 ccrun 的回复:
    音什么乐杀什么手?没听说过。个人严重不建议使用非官方的安装包,至于所谓的精简版及Lite版,更不推荐。

    Update3的安装,需要有原始文件安装完后隐藏的缓冲文件,在%ProgramData%目录下,大小有一两个G以上。如果这些缓冲文件不存在,安装不能继续。

    NND,怎么做这么麻烦,是不是怕人用它的工具啊~~~~~~~~~

    直接到官方下吧

    听专家的话没错,呵呵

    听话

    update3更新完了,需不需要重新破解啊

  • Filed under: C++ Builder