关于delphi的开发方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于delphi的开发方式相关的知识,希望对你有一定的参考价值。

现在使用delphi7+sql server2005作C/S架构的管理系统,在客户机上安装有SQL数据库,现在的开发模式就是向窗体上拖组件,然后在组件的各种事件里写代码,这样是快捷一些,但是维护不太方便,客户端有改动的话就需要重新更新, 由于防火墙或者网络配置原因,自动升级不是每个客户端都管用
我想换一种方式,大体的想法就是用类来实现组件事件需要的方法,然后把类封装在DLL文件里面,DLL文件放在服务器上,客户端执行时调取服务器上的DLL文件,有更新时,只要不是用户界面的改动,就直接更新DLL文件,而不用更新客户端的用户界面,
这样可不可行? 有没有具体介绍的书籍之类的教程?

好吧 很早就有和你同样的想法。
不知道你是三层架构还是两层架构的,如果是三层架构,客户端和中间层以及服务器是可能不再同一个局域网内,这样的话,你的dll文件依然要通过tcp/ip协议进行下载,防火墙等等一样会出现问题。如果是在局域网内,建立一个ftp服务器就ok了
问题的关键不在这,在与关键你要怎么实现动态的客户端。如果想法是要把窗体上的各个组建都封装到DLL里面然后由DLL调用,那你更新客户端的时候一样要替换文件,这就不如直接替换exe文件来的实在。
所以尽量将动态过程搞到数据库中,dll 只定义接口规则就ok,这样的话,你只要改下数据 便可以更新客户端了

562759534 有想法可以QQ联系 ,这样的书你是肯定找不到的。自己搞吧。祝你成功追问

为什么这样的书很少?

参考技术A 你可以把数据库放在服务器端,采用webservice的方式进行对数据访问的封装;webservice的对外开放的接口不变。webservice用其他语言写也可以,以后其他web应用可以使用此接口。 参考技术B 这个典型的三层结构需求;(MVC),建议不用dll方式,
用RO控件就能满足你的业务需求;
你需要抽象业务逻辑,开发中间件程序,设计webservice 用xml做数据通信!

关于delphi调用C++的DLL中char*参数的问题

我现在在用delphi做一个接口,接口DLL是使用C++开发的,接口规范如下:
dll动态链接库文件名为:networkBillPrn.dll,无须注册,将dll文件放在系统文件目录或HIS系统的同一文件目录。方法: int CallBillService(char * inParams, char * outParams)传入参数inParams是json数据格式,传入参数outParams是以实参方式传入的,它的值是His系统调用票据系统的接口的返回结果,也是json数据格式,返回值是表示outParams的字符串长度。
我是这样实现的:
var
billTest: TbillTest;
//调用方法CallBillService
function CallBillService(inParams:PChar; outParams:PChar): Integer; stdcall; external 'NetworkBillPrnDll.dll';
implementation

$R *.dfm

procedure TbillTest.btn1Click(Sender: TObject);
var
jo,jt:ISuperObject;
billAddr,inParam:String;
returnNum:Integer;
outParam:PChar;
begin
billAddr:=UpperCase(Trim(Edit_Addr.Text));
jo:=SO('"billAddr":"http://202.99.207.176:7001/BILL/BsExecute","appVersion":"1.0.0.1","deptNode":"16100101","secretKey":"A990AA3E8D9FDE5D04EA0BAE88450A0B0D4BA8931778CDCA17","methodName":"getValidBillNo","busName":"hisMz","billReg":"测试"');
inParam:=jo.AsString;
//将json内容写入日志文件
writeTxt(PChar(inParam),'测试服务器端-输入');
outParam:='';
//执行到下面这条语句报错
returnNum:= CallBillService(PChar(inParam),outParam);
writeTxt(outParam,'测试服务器端-输出');
ShowMessage(IntToStr(returnNum));
end;

procedure TbillTest.writeTxt(tmpString:string;operaName:string);
var
wText: TextFile;
shijian:string;
begin
shijian:=DateTimeToStr(Now());
AssignFile(wText, 'logo.txt');
Append(wText);
Writeln(wText,'-----时间:' + shijian + '--操作:' + operaName + '-----');
Writeln(wText, tmpString);
CloseFile(wText);
end;

end.
请高手给予解答,谢谢。

&符号在c++中是表示引用类型,在c#中类似ref,在dellphi作为参数有var关键字来表示:BOOLNVS_Login(ULONG&lLoginID,constchar*szNvsIP,intnNvsPort,constchar*szUser,constchar*szPwd)转为delphi:functionNVS_Login(varlLoginID:DWORD;constszNvsIP:PChar;constszUser:PChar;constszPwd:PChar):boolean; 参考技术A 调用前,参数变量,初始化一下

~
~
~追问

怎么初始化,能给举一个例子吗?

以上是关于关于delphi的开发方式的主要内容,如果未能解决你的问题,请参考以下文章

delphi中使用HTTP控件,怎么使用POST的异步方式

delphi支持跨操作系统的方式

用Delphi进行word开发

关于delphi调用C++的DLL中char*参数的问题

如何用Delphi开发网游外挂

如何用DELPHI进行开发?