<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BCB||C++</title><link>http://leejd.cndev.org/category/665.aspx</link><description>BCB||C++</description><managingEditor>小东</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>小东</dc:creator><title>QT的第一次编译</title><link>http://leejd.cndev.org/archive/2005/12/24/44758.aspx</link><pubDate>2005-12-24 20:26:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/12/24/44758.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/44758.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/12/24/44758.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/44758.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/44758.aspx</trackback:ping><description>&lt;P&gt;以前一直在使用BCB，主要是基于borland的感情，但是目前的情况看，我得项目不能再跟着borland走了。由于GUI涉及的内容还是不少的，因此转换的过程需要谨慎。经过1个月的评比，参考了很多人的使用感受之后，最终选择了QT，而不是wx。&lt;/P&gt;
&lt;P&gt;我先下GPL版本的QT开始学习，安装过程还是狠简单的，中间安装了minGW。然后按照教程里面的Hello Word章节写了一个例子。由于QT没有提供IDE环境，对于习惯于windows下面开发的我还是有一点点不适应。不过倒霉事在后头：（&lt;/P&gt;
&lt;P&gt;使用命令&lt;BR&gt;qmake -project&lt;BR&gt;qmake&lt;BR&gt;可以生成3个目录，一个debug，一个release和一个tmp目录，还有3个makefile文件和一个工程文件(.pro)。剩下的make就得借助别的编译器来完成了。开始的时候使用BCB的make，但是提示什么FORCE之类的问题。使用-t vcapp参数生成VC的dsp文件，在VC下面编译，也还是不行。既然本身带了minGW，为什么不用自己的mingw32-make试试呢。最终终于完成了make。不过由于minGW和QT不是安装在一个目录的，为了方便起见，写了个批处理文件：&lt;/P&gt;
&lt;P&gt;@ECHO OFF&lt;BR&gt;set QTDIR=E:\Leejd\qt4&lt;BR&gt;set PATH=E:\Leejd\qt4\bin;E:\Leejd\MinGW\bin;%SystemRoot%\System32;%path%&lt;BR&gt;set QMAKESPEC=win32-g++&lt;/P&gt;
&lt;P&gt;if exist release del release\*.* /q&lt;BR&gt;qmake -project&lt;BR&gt;qmake&lt;BR&gt;mingw32-make&lt;/P&gt;
&lt;P&gt;只要把这个批处理文件扔到你的例子目录下，双击执行就OK！&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/44758.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>Python的数据结构还是狠不错的</title><link>http://leejd.cndev.org/archive/2005/09/08/43565.aspx</link><pubDate>2005-09-08 17:39:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/09/08/43565.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/43565.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/09/08/43565.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/43565.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/43565.aspx</trackback:ping><description>&lt;P&gt;现在写的程序中，一直都在集成Python，所以对Python的数据结构比较熟悉了。今天使用STL来写一个不带Python的程序，发现STL的结构虽然轻巧，但是感觉Python的数据结构操作起来更是方便。可能是跟这几天一直在用Python的数据结构有关吧。&lt;/P&gt;
&lt;P&gt;其实最关键的地方是文本文件的处理，使用Python脚本把文本读进来，处理，然后直接存为Python的数据结构方式，比使用C++读入文本再使用STL方式来保存方便很多。不过Python的数据结构至少需要带一个DLL文件，这对于小程序是一个累赘啊。&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/43565.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>老大来信了</title><link>http://leejd.cndev.org/archive/2005/06/06/14750.aspx</link><pubDate>2005-06-06 21:18:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/06/06/14750.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/14750.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/06/06/14750.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/14750.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/14750.aspx</trackback:ping><description>&lt;P&gt;前几天,应老大的强烈要求,我花了几天晚上的时间,帮老大草草的做了一个CRM软件(嘿嘿,老大要我这么叫的),由于CRM方面的知识我了解的不多,因此,我是参考了一个很简单的CRM做的.不过由于时间简单,很多的地方功能没有实现,测试也只是简单的进行了功能测试,而且只测试了常用的功能,有些功能根本就没有进行测试,然后就冲冲的给老大发过去了.&lt;/P&gt;
&lt;P&gt;首先,老大那边说不能运行,发现是数据库的驱动没有带走,我只给他一个可执行文件和一个数据库文件,落下数据库驱动了.后来又发现,缺少一个midas.dll.我这次是首次使用BCB的midas组件进行开发,以前没有发布过,这次首发,没有考虑,郁闷啊.以前老大很信任我的,现在这么搞,在老大心中的信任度严重下降,汗!&lt;/P&gt;
&lt;P&gt;老大当初给我了很多的需求,这次来信向我抗议,怎么好几个需求没有完成啊?我以核对,还真是呢.汗!没法,用excel把老大的需求做到一个列表里面,以后每次给他版本的时候,我可以核对一下,哪些需求还没有完成.&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/14750.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>数据库的选择</title><link>http://leejd.cndev.org/archive/2005/04/29/11981.aspx</link><pubDate>2005-04-29 23:52:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/04/29/11981.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/11981.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/04/29/11981.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/11981.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/11981.aspx</trackback:ping><description>&lt;P&gt;开始的时候，准备在自己的客户端系统中完全放弃数据库，改用内存和XML实现，这样操作起来简单，可移植性也高。但是到目前，发现一个问题，就是数据库编辑后保存没有想想中的简单。虽然可以做到，但是代码量却是直线上升。看来不引入数据库是不行了。&lt;/P&gt;
&lt;P&gt;开始的时候考虑使用access，不过根据以前的经验，这个玩意太不可靠了，对开发人员要求很高，数据库操作稍微不小心，就会给你报错。想想还是放弃吧，以后给工程人员维护，估计数据库会。考虑使用客户端可以嵌入的数据库系统，这样在客户端可以一次安装。所以MSDE之类的已经不在考虑之列了。最后在mysql，sqlite，firebird之间选择（发现一个开源数据库比较的网页：&lt;A href="http://www.csdn.net/news/newstopic/4/4986.shtml"&gt;http://www.csdn.net/news/newstopic/4/4986.shtml&lt;/A&gt;），由于客户端使用了BCB工具进行开发，而且前段时间好像也有人提到Python链接FB的问题，估计这两个支持是没有问题的了。这样可以使用BCB的快速的GUI开发功能，也可使用Python的脚本功能。&lt;/P&gt;
&lt;P&gt;不过目前使用FB遇到的一个问题是，没有一个GUI界面的可以操作FB数据库的工具，可能是我没有找到。暂时还不了解Python对FB支持的程度，还得找找资料，慢慢来啊！找到了一个FB工具的网站：&lt;A href="http://www.sqlmanager.net/products/ibfb"&gt;http://www.sqlmanager.net/products/ibfb&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/11981.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>函数调用终于可以返回值了</title><link>http://leejd.cndev.org/archive/2005/04/18/10886.aspx</link><pubDate>2005-04-18 21:49:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/04/18/10886.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/10886.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/04/18/10886.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/10886.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/10886.aspx</trackback:ping><description>&lt;P&gt;前几天的BCB调用Python，没有直接在C++里面调用Python函数，只是简单的使用了PyRun_SimpleString()这个函数进行指定字符串的执行。这种调用，对于没有输出结果，或者是输出结果在文件之类时还是可以使用的，但是通常情况下，我们调用函数是需要返回一个结果给被调用者的。针对这种情况，使用解释字串方式可行性不大了（可以实现，使用输出流重定向，但是处理起来复杂），只能是调用函数，然后接受函数的返回值。&lt;/P&gt;
&lt;P&gt;这种调用也是比较简单的（因为我只要求返回字串就可以了:)），首先使用PyImport_ImportModule初始化你要调用的模块(一般指文件名)，然后使用PyObject_CallMethod调用你的Python函数，当然了，调用函数的参数是需要设置的。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;参考代码：&lt;/STRONG&gt;&lt;BR&gt;-----------------------------------&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnsiString ScriptPath = ExtractFilePath(Application-&amp;gt;ExeName)+&lt;FONT color=#0000ff&gt;"script"&lt;/FONT&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnsiString PyStr;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PyObject *pName, *pOs, *pArg, *pResult, *pCall;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Py_Initialize();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitLogger();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOs = PyImport_ImportModule(&lt;FONT color=#0000ff&gt;"os.path"&lt;/FONT&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PyObject_CallMethod(pOs, &lt;FONT color=#0000ff&gt;"join"&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;"(s)"&lt;/FONT&gt;, ScriptPath.c_str());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pCall = PyImport_ImportModule(&lt;FONT color=#0000ff&gt;"BOMandXY"&lt;/FONT&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pResult = PyObject_CallMethod(pCall, &lt;FONT color=#0000ff&gt;"ReadBOM"&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;"(s)"&lt;/FONT&gt;, FileName.c_str());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowMessage(PyString_AsString(pResult));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Py_Finalize();&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/10886.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>BCB中集成Python终于成功了</title><link>http://leejd.cndev.org/archive/2005/04/16/10764.aspx</link><pubDate>2005-04-16 15:30:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/04/16/10764.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/10764.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/04/16/10764.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/10764.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/10764.aspx</trackback:ping><description>&lt;P&gt;这几天经过断断续续的摸索，请教了不少人，也发了不少帖子和mail，终于把Python集成到BCB里面的工作给实现了。&lt;/P&gt;
&lt;P&gt;其实按照Python给的文档里面的描述不错，确实是可以使用的，不过那个是发布版本的，而我们的工程默认是DEBUG版本的，里面有一个宏：_DEBUG。所以如果你使用的是默认的工程，编译Python文档给的例子是链接无法通过的。解决的办法就是增加DEBUG的LIB和DLL。开始的时候，我使用的是别人给我的lib库和dll文件，但是在运行的时候，出现错误。经过调试，应该不是我自己程序本身的问题，怀疑debug库是要在自己机器上编译的。然后下个Python的源码，在自己的机器上编译了一个lib和dll，再加入到工程里面就好了。&lt;/P&gt;
&lt;P&gt;还发现一个问题，Python在解释的时候，居然不认识\r这个字符，我在PyRun_SimpleString()之前必须要把这个字符替换掉。界面如下&lt;BR&gt;&lt;IMG src="http://www.cndev.org/.imgdb/sn10049/GUID-AB0F12D9-8E2A-4F52-A0FB-99701EDD74E0.jpg"&gt;&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/10764.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>BCB中集成Python</title><link>http://leejd.cndev.org/archive/2005/04/09/10321.aspx</link><pubDate>2005-04-09 23:56:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/04/09/10321.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/10321.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/04/09/10321.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/10321.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/10321.aspx</trackback:ping><description>&lt;P&gt;准备在BCB中集成Python真是一波三折啊，开始准备使用Python的C API来实现，但是调试到半道，由于Py_DECREF()函数的干扰（编译的时候会出现三个链接错误），导致暂停API的实现。而是改用PythonForDelphi，不过PythonForDelphi进展也不是很好，最后还是撤回C API的实现方式。根据Python文档中提供的集成的例子，在去掉了Py_DECREF()函数后是编译链接没有问题了，运行也是正常，不过内存管理可能会出现问题，先不管这么多了。&lt;/P&gt;
&lt;P&gt;运行程序后，还是出现了以前的那个site问题：'import site' failed; use -v for traceback。除了这个提示，程序还是可以运行的，这里估计和列表里面经常提的Site文件有关吧。今天的Python代码的例子里面含有re，结果发现，这个re包含了不少的东西的，运行的时候老是说XX模块无法导入，例如：sre，sre_compile，sre_constants，sre_parse，string等。看来想集成Python脚本，还要注意相关模块的导入问题啊，这些模块如果都导入，可能文件的大小估计会肥很多的。&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/10321.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>PythonForDelphi玩不转啊</title><link>http://leejd.cndev.org/archive/2005/04/08/10276.aspx</link><pubDate>2005-04-08 22:17:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/04/08/10276.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/10276.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/04/08/10276.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/10276.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/10276.aspx</trackback:ping><description>&lt;P&gt;昨天，我在maillist里面发了一封求助信，求PythonForDelphi，今天回来发现别人发送给我了，安装过程很顺利，加载包，发现只有CB5的，我使用的CB6，不过这个兼容性应该是有的。编译，安装，OK。在CB6的组件面板上面，也有Python出来。&lt;/P&gt;
&lt;P&gt;新建一个工程，放入PythonEngine组件，发现保存的时候需要输入头文件和lib文件，这个是因为没有包括相应的路径。编译运行，没有问题，在退出程序的时候，告诉你Runtime Error。开始的时候怀疑是内存释放的问题，但是别人在delphi下面是可以用的，后来怀疑是lib库的问题，使用C++ Builder Notes文件里面的：implib -a &amp;lt;INSTALLDIR&amp;gt;\Components\py21.lib WINNT\SYSTEM32\python21.dll方式导入，还是不行，暂时只能先放弃了，先问问高手们是怎么解决的。&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/10276.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>改变STL中的默认输出流</title><link>http://leejd.cndev.org/archive/2005/03/27/9213.aspx</link><pubDate>2005-03-27 23:33:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/03/27/9213.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/9213.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/03/27/9213.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/9213.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/9213.aspx</trackback:ping><description>&lt;P&gt;我们写程序的时候，为了方便，经常需要修改流的方向，或者将默认的输出流重定向到我们的文件或者是内存中，而不是系统默认的终端。参考代码如下：&lt;/P&gt;
&lt;P&gt;#include &amp;lt;iostream&amp;gt;&lt;BR&gt;#include &amp;lt;fstream&amp;gt;&lt;/P&gt;
&lt;P&gt;int main(int argc, char* argv[])&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::ofstream StreamOut( "out.txt");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::streambuf * OldBuf = std::cout.rdbuf( streamOut.rdbuf());&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //写入out.txt文件中&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; streamOut &amp;lt;&amp;lt; "streamOut\n";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout &amp;lt;&amp;lt; "std::cout\n";&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //注意恢复&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout.rdbuf( OldBuf);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR&gt;} &lt;/P&gt;
&lt;P&gt;下面是如何使得上面的代码自动运行：&lt;/P&gt;
&lt;P&gt;#include &amp;lt;iostream&amp;gt;&lt;/P&gt;
&lt;P&gt;template&amp;lt; class char_type, class char_traits = std::char_traits&amp;lt; char_type&amp;gt; &amp;gt;&lt;BR&gt;class basic_redirect_from_to&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; typedef std::basic_ios&amp;lt; char_type, char_traits&amp;gt; ios_type;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; typedef std::basic_streambuf&amp;lt; char_type, char_traits&amp;gt; streambuf_type;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; typedef basic_redirect_from_to&amp;lt; char_type, char_traits&amp;gt; this_class;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; basic_redirect_from_to( const this_class &amp;amp; );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this_class &amp;amp; operator=( this_class &amp;amp;);&lt;/P&gt;
&lt;P&gt;public:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; basic_redirect_from_to( ios_type &amp;amp; streamFrom, ios_type &amp;amp; streamTo)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : m_streamFrom( streamFrom)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_pOriginalBuffer = m_streamFrom.rdbuf( streamTo.rdbuf());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~basic_redirect_from_to()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_streamFrom.rdbuf( m_pOriginalBuffer);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;private:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ios_type &amp;amp; m_streamFrom;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; streambuf_type * m_pOriginalBuffer;&lt;BR&gt;};&lt;/P&gt;
&lt;P&gt;typedef basic_redirect_from_to&amp;lt; char&amp;gt; redirect_from_to;&lt;BR&gt;typedef basic_redirect_from_to&amp;lt; wchar_t&amp;gt; wredirect_from_to;&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/9213.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>BCB中使用URLDownloadToFile</title><link>http://leejd.cndev.org/archive/2005/03/15/8196.aspx</link><pubDate>2005-03-15 22:54:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/03/15/8196.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/8196.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/03/15/8196.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/8196.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/8196.aspx</trackback:ping><description>&lt;P&gt;HRESULT URLDownloadToFile( &lt;BR&gt;LPUNKNOWN pCaller, &lt;BR&gt;LPCSTR szURL, &lt;BR&gt;LPCSTR szFileName, &lt;BR&gt;DWORD dwReserved, &lt;BR&gt;LPBINDSTATUSCALLBACK lpfnCB); &lt;BR&gt;pCaller&amp;nbsp; &lt;BR&gt;仅当调用者是一个ActiveX对象才使用，对于一个非ActiveX对象的应用程序这个参数应该为NULL&amp;nbsp; &lt;BR&gt;szURL&amp;nbsp; &lt;BR&gt;为要下载的绝对URL 文件名，这个参数不能为空。 &lt;BR&gt;szFileName&amp;nbsp; &lt;BR&gt;包含创建的目标文件名&amp;nbsp; &lt;BR&gt;dwReserved&amp;nbsp; &lt;BR&gt;必须为零 &lt;BR&gt;lpfnCB&amp;nbsp; &lt;BR&gt;一个指向 IBindStatusCallback 接口的指针, IE通过它向你通知下载的进度。 &lt;BR&gt;利用URLDownloadToFile()下载文件可以分下面几个步骤： &lt;BR&gt;1. 提供一个要下载的URL文件名。 &lt;BR&gt;2. 构造一个目标创建文件的完整路径含文件名。 &lt;BR&gt;3. 创建一个IbindStatusCallback派生类，编写OnProgress()重载函数。 &lt;BR&gt;4. 派生一个类对象的事例 &lt;BR&gt;5. 调用URLDownLoad 函数，由于这个函数调用是同步的，因此你最好在一个工作者线程中调用这个函数， &lt;BR&gt;6. 在OnProgress函数中，提供任何你需要的进度指示信息和其它界面，函数返回值告诉IE是继续下载或者是放弃下载。.&amp;nbsp; &lt;BR&gt;使用IbindStatusCallback &lt;BR&gt;IBindStatusCallback 回调接口共有8个方法，但是你只需关心OnProgress(). 其它方法只需返回 E_NOTIMPL.&amp;nbsp; &lt;BR&gt;OnProgress 实现的规范是： &lt;BR&gt;HRESULT OnProgress( &lt;BR&gt;ULONG ulProgress, &lt;BR&gt;ULONG ulProgressMax, &lt;BR&gt;ULONG ulStatusCode, &lt;BR&gt;LPCWSTR szStatusText ); &lt;BR&gt;ulProgress&amp;nbsp; &lt;BR&gt;到目前为止已经下载的字节数。 &lt;BR&gt;ulProgressMax&amp;nbsp; &lt;BR&gt;要下载的文件大小，0表示大小未知，需要注意的是，这个值仅在OnProgress调用期间变化，所以你不能把它保存到一个静态变量中，你应该在每次调用时检查这个值。&amp;nbsp; &lt;BR&gt;ulStatusCode&amp;nbsp; &lt;BR&gt;状态标志，这个值可以为下列一些值： &lt;BR&gt;BINDSTATUS_BEGINDOWNLOADCOMPONENTS, &lt;BR&gt;BINDSTATUS_INSTALLINGCOMPONENTS, &lt;BR&gt;BINDSTATUS_ENDDOWNLOADCOMPONENTS.&amp;nbsp; &lt;BR&gt;szStatusText&amp;nbsp; &lt;BR&gt;图形界面中使用的字符串，由IE 提供，这个变量可能为NULL，在使用前应该检查这个变量。 &lt;BR&gt;OnProgress() 返回 S_OK 告诉IE 要继续下载， E_ABORT 则表示放弃下载 &lt;/P&gt;
&lt;P&gt;---------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;// 在工程中加入 Urlmon.lib&lt;BR&gt;#include &amp;lt;vcl.h&amp;gt;&lt;BR&gt;#include &amp;lt;windows.h&amp;gt;&lt;BR&gt;#include &amp;lt;Urlmon.h&amp;gt;&lt;/P&gt;
&lt;P&gt;具体可以参考：&lt;BR&gt;&lt;A href="http://www.soft2.com/cb-net/20041107220006145.htm"&gt;http://www.soft2.com/cb-net/20041107220006145.htm&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.ccw.com.cn/htm/app/aprog/01_11_30_2.asp"&gt;http://www.ccw.com.cn/htm/app/aprog/01_11_30_2.asp&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/8196.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>