选择显示字体大小

对使用delphi制作dll复用文件的建议

  在公司里有一些需要制作dll的场合,因为熟悉、方便和简易,大多数使用delphi来制作。现在就这个主题提出一些个人建议。

  尽量使用标准dll接口。指的是传递的参数类型及函数返回类型不能是delphi特有的,比如string(ansistring),以及动态数组和含有这些类型成员的复合类型(如记录),也不能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。如果使用了string类型或动态数组类型,且调用方不是delphi程序,则基本上会报错。如果调用方是delphi但调用方或被调用方没有在工程文件的第一包含单元不是sharemem,也可能会出错。

  如果调用方是delphi应用程序,则可能可以使用不包含禁止类型(string, 动态数组)数据成员的对象作为参数或返回值,但也应尽量避免。

  如果调用方与被调用方都是delphi程序,而且要使用string或动态数组作参数,则双方工程文件的第一包含单元必须是sharemem。(c++builder程序的情况可能与此相同,不过没有测试过。)

  如果调用方不是delphi程序,则string、动态数组、包含string或动态数组的复合数据类型及类实例,都不能作为参数及返回值。

  因此,为了提高dll的复用范围,避免可能存在的错误,应当使用标准win32 api标准参数类型,以前使用string的变量,可以使用pchar(s)转换。动态数组则转换为指针类型(@array[0]),并加上数组的长度。

  如果因为调用方与被调用方都是delphi程序,为了编写方便,不想进行上述转换,则推荐使用运行时包的形式。运行时包可以保证动态分配数据的正确释放。这样因为其扩展名(.bpl),显出该文件仅限于delphi/c++builder使用(不象dll)。

  其次,尽量避免使用overload的函数/过程作输出,如果同一操作有多个方式,则可以让函数/过程名有少许差别,类似于delphi中的formatxxxx、createxxxx等函数及方法,如createbydefaultfile, createdefault。

  最后,作为dll的提供者,应当提供直接编程的接口文件,如delphi中的.pas或.dcu(最好是.pas,因为可以有注释)、c及c++中的.h和.lib。而不是让使用者们自己创建。如果非要有overload的函数/过程,这一点显得特别重要。另外,作为delphi应用,提供的.pas文件可以是提前连接的(使用external指定dll中的输出函数),也可以是后期连接的(使用loadlibrary、getprocaddress),dll提供者提供编程接口文件,既显得正式(或hiqos),又有保障。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons