-
Recent Posts
Recent Comments
- fdaf on SVN — import
- 千寻 on 常用的正则表达式及符号诠释
- 55659 on 常用的正则表达式及符号诠释
- 55659 on 常用的正则表达式及符号诠释
- vincent on Python的调试
Archives
Categories
Meta
Category Archives: BCB||C++
QT的第一次编译
以前一直在使用BCB,主要是基于borland的感情,但是目前的情况看,我得项目不能再跟着borland走了。由于GUI涉及的内容还是不少的,因此转换的过程需要谨慎。经过1个月的评比,参考了很多人的使用感受之后,最终选择了QT,而不是wx。 我先下GPL版本的QT开始学习,安装过程还是狠简单的,中间安装了minGW。然后按照教程里面的Hello Word章节写了一个例子。由于QT没有提供IDE环境,对于习惯于windows下面开发的我还是有一点点不适应。不过倒霉事在后头:( 使用命令qmake -projectqmake可以生成3个目录,一个debug,一个release和一个tmp目录,还有3个makefile文件和一个工程文件(.pro)。剩下的make就得借助别的编译器来完成了。开始的时候使用BCB的make,但是提示什么FORCE之类的问题。使用-t vcapp参数生成VC的dsp文件,在VC下面编译,也还是不行。既然本身带了minGW,为什么不用自己的mingw32-make试试呢。最终终于完成了make。不过由于minGW和QT不是安装在一个目录的,为了方便起见,写了个批处理文件: @ECHO OFFset QTDIR=E:\Leejd\qt4set PATH=E:\Leejd\qt4\bin;E:\Leejd\MinGW\bin;%SystemRoot%\System32;%path%set QMAKESPEC=win32-g++ if exist release del release\*.* /qqmake -projectqmakemingw32-make 只要把这个批处理文件扔到你的例子目录下,双击执行就OK!
Posted in BCB||C++
5 Comments
Python的数据结构还是狠不错的
现在写的程序中,一直都在集成Python,所以对Python的数据结构比较熟悉了。今天使用STL来写一个不带Python的程序,发现STL的结构虽然轻巧,但是感觉Python的数据结构操作起来更是方便。可能是跟这几天一直在用Python的数据结构有关吧。 其实最关键的地方是文本文件的处理,使用Python脚本把文本读进来,处理,然后直接存为Python的数据结构方式,比使用C++读入文本再使用STL方式来保存方便很多。不过Python的数据结构至少需要带一个DLL文件,这对于小程序是一个累赘啊。
老大来信了
前几天,应老大的强烈要求,我花了几天晚上的时间,帮老大草草的做了一个CRM软件(嘿嘿,老大要我这么叫的),由于CRM方面的知识我了解的不多,因此,我是参考了一个很简单的CRM做的.不过由于时间简单,很多的地方功能没有实现,测试也只是简单的进行了功能测试,而且只测试了常用的功能,有些功能根本就没有进行测试,然后就冲冲的给老大发过去了. 首先,老大那边说不能运行,发现是数据库的驱动没有带走,我只给他一个可执行文件和一个数据库文件,落下数据库驱动了.后来又发现,缺少一个midas.dll.我这次是首次使用BCB的midas组件进行开发,以前没有发布过,这次首发,没有考虑,郁闷啊.以前老大很信任我的,现在这么搞,在老大心中的信任度严重下降,汗! 老大当初给我了很多的需求,这次来信向我抗议,怎么好几个需求没有完成啊?我以核对,还真是呢.汗!没法,用excel把老大的需求做到一个列表里面,以后每次给他版本的时候,我可以核对一下,哪些需求还没有完成.
Posted in BCB||C++, 我的原创
2 Comments
数据库的选择
开始的时候,准备在自己的客户端系统中完全放弃数据库,改用内存和XML实现,这样操作起来简单,可移植性也高。但是到目前,发现一个问题,就是数据库编辑后保存没有想想中的简单。虽然可以做到,但是代码量却是直线上升。看来不引入数据库是不行了。 开始的时候考虑使用access,不过根据以前的经验,这个玩意太不可靠了,对开发人员要求很高,数据库操作稍微不小心,就会给你报错。想想还是放弃吧,以后给工程人员维护,估计数据库会。考虑使用客户端可以嵌入的数据库系统,这样在客户端可以一次安装。所以MSDE之类的已经不在考虑之列了。最后在mysql,sqlite,firebird之间选择(发现一个开源数据库比较的网页:http://www.csdn.net/news/newstopic/4/4986.shtml),由于客户端使用了BCB工具进行开发,而且前段时间好像也有人提到Python链接FB的问题,估计这两个支持是没有问题的了。这样可以使用BCB的快速的GUI开发功能,也可使用Python的脚本功能。 不过目前使用FB遇到的一个问题是,没有一个GUI界面的可以操作FB数据库的工具,可能是我没有找到。暂时还不了解Python对FB支持的程度,还得找找资料,慢慢来啊!找到了一个FB工具的网站:http://www.sqlmanager.net/products/ibfb
Posted in BCB||C++, Python, 数据库
6 Comments
函数调用终于可以返回值了
前几天的BCB调用Python,没有直接在C++里面调用Python函数,只是简单的使用了PyRun_SimpleString()这个函数进行指定字符串的执行。这种调用,对于没有输出结果,或者是输出结果在文件之类时还是可以使用的,但是通常情况下,我们调用函数是需要返回一个结果给被调用者的。针对这种情况,使用解释字串方式可行性不大了(可以实现,使用输出流重定向,但是处理起来复杂),只能是调用函数,然后接受函数的返回值。 这种调用也是比较简单的(因为我只要求返回字串就可以了:)),首先使用PyImport_ImportModule初始化你要调用的模块(一般指文件名),然后使用PyObject_CallMethod调用你的Python函数,当然了,调用函数的参数是需要设置的。 参考代码:———————————– AnsiString ScriptPath = ExtractFilePath(Application->ExeName)+“script”; AnsiString PyStr; PyObject *pName, *pOs, *pArg, *pResult, *pCall; Py_Initialize(); InitLogger(); pOs = PyImport_ImportModule(“os.path”); PyObject_CallMethod(pOs, “join”, “(s)”, ScriptPath.c_str()); pCall = PyImport_ImportModule(“BOMandXY”); pResult = PyObject_CallMethod(pCall, “ReadBOM”, “(s)”, FileName.c_str()); ShowMessage(PyString_AsString(pResult)); Py_Finalize();
Posted in BCB||C++, Python
Leave a comment
BCB中集成Python终于成功了
这几天经过断断续续的摸索,请教了不少人,也发了不少帖子和mail,终于把Python集成到BCB里面的工作给实现了。 其实按照Python给的文档里面的描述不错,确实是可以使用的,不过那个是发布版本的,而我们的工程默认是DEBUG版本的,里面有一个宏:_DEBUG。所以如果你使用的是默认的工程,编译Python文档给的例子是链接无法通过的。解决的办法就是增加DEBUG的LIB和DLL。开始的时候,我使用的是别人给我的lib库和dll文件,但是在运行的时候,出现错误。经过调试,应该不是我自己程序本身的问题,怀疑debug库是要在自己机器上编译的。然后下个Python的源码,在自己的机器上编译了一个lib和dll,再加入到工程里面就好了。 还发现一个问题,Python在解释的时候,居然不认识\r这个字符,我在PyRun_SimpleString()之前必须要把这个字符替换掉。界面如下
Posted in BCB||C++, Python
4 Comments
BCB中集成Python
准备在BCB中集成Python真是一波三折啊,开始准备使用Python的C API来实现,但是调试到半道,由于Py_DECREF()函数的干扰(编译的时候会出现三个链接错误),导致暂停API的实现。而是改用PythonForDelphi,不过PythonForDelphi进展也不是很好,最后还是撤回C API的实现方式。根据Python文档中提供的集成的例子,在去掉了Py_DECREF()函数后是编译链接没有问题了,运行也是正常,不过内存管理可能会出现问题,先不管这么多了。 运行程序后,还是出现了以前的那个site问题:’import site’ failed; use -v for traceback。除了这个提示,程序还是可以运行的,这里估计和列表里面经常提的Site文件有关吧。今天的Python代码的例子里面含有re,结果发现,这个re包含了不少的东西的,运行的时候老是说XX模块无法导入,例如:sre,sre_compile,sre_constants,sre_parse,string等。看来想集成Python脚本,还要注意相关模块的导入问题啊,这些模块如果都导入,可能文件的大小估计会肥很多的。
Posted in BCB||C++, Python
Leave a comment
PythonForDelphi玩不转啊
昨天,我在maillist里面发了一封求助信,求PythonForDelphi,今天回来发现别人发送给我了,安装过程很顺利,加载包,发现只有CB5的,我使用的CB6,不过这个兼容性应该是有的。编译,安装,OK。在CB6的组件面板上面,也有Python出来。 新建一个工程,放入PythonEngine组件,发现保存的时候需要输入头文件和lib文件,这个是因为没有包括相应的路径。编译运行,没有问题,在退出程序的时候,告诉你Runtime Error。开始的时候怀疑是内存释放的问题,但是别人在delphi下面是可以用的,后来怀疑是lib库的问题,使用C++ Builder Notes文件里面的:implib -a <INSTALLDIR>\Components\py21.lib WINNT\SYSTEM32\python21.dll方式导入,还是不行,暂时只能先放弃了,先问问高手们是怎么解决的。
改变STL中的默认输出流
我们写程序的时候,为了方便,经常需要修改流的方向,或者将默认的输出流重定向到我们的文件或者是内存中,而不是系统默认的终端。参考代码如下: #include <iostream>#include <fstream> int main(int argc, char* argv[]){ std::ofstream StreamOut( “out.txt”); std::streambuf * OldBuf = std::cout.rdbuf( streamOut.rdbuf()); //写入out.txt文件中 streamOut << “streamOut\n”; std::cout << “std::cout\n”; //注意恢复 std::cout.rdbuf( OldBuf); return 0;} 下面是如何使得上面的代码自动运行: #include <iostream> template< class char_type, class char_traits … Continue reading
Posted in BCB||C++
Leave a comment
BCB中使用URLDownloadToFile
HRESULT URLDownloadToFile( LPUNKNOWN pCaller, LPCSTR szURL, LPCSTR szFileName, DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB); pCaller 仅当调用者是一个ActiveX对象才使用,对于一个非ActiveX对象的应用程序这个参数应该为NULL szURL 为要下载的绝对URL 文件名,这个参数不能为空。 szFileName 包含创建的目标文件名 dwReserved 必须为零 lpfnCB 一个指向 IBindStatusCallback 接口的指针, IE通过它向你通知下载的进度。 利用URLDownloadToFile()下载文件可以分下面几个步骤: 1. 提供一个要下载的URL文件名。 2. 构造一个目标创建文件的完整路径含文件名。 3. 创建一个IbindStatusCallback派生类,编写OnProgress()重载函数。 4. 派生一个类对象的事例 5. 调用URLDownLoad 函数,由于这个函数调用是同步的,因此你最好在一个工作者线程中调用这个函数, 6. 在OnProgress函数中,提供任何你需要的进度指示信息和其它界面,函数返回值告诉IE是继续下载或者是放弃下载。. … Continue reading