• 用Delphi开发动态库DLL


    公司的ERP系统一直被邮件所烦。

    以前在ERP里面发送邮件,采用的是一个在网上找的DLL文件,没有源码。

    这个DLL文件采用的是SMTP方式,可以实现简单的邮件发送,更高级的功能就没有,比如副本,附件,以HTML方式发送等。

    最近有一些时间,抽空就把这个问题解决了一下。

    首先用Wireshark监控了一下这个DLL文件发送时的数据包,发现应该是用Delphi的Indy组件具体实现的。

    Indy组件刚好会用,就用Delphi+Indy开发了一个自己的DLL邮件发送功能,解决了公司一直困扰的问题。

    需要说明的是Delphi开发DLL供PowerBuilder调用过程中需要注意的一些问题:
    1. Delphi要使用ActiveX Library方式,这样编译是生成的才是一个DLL文件。
    2. 最好用一个单独的unit来存放具体的实现代码,这样的目的是方便可以建立另外一个测试用的application。例如,sendmail这个组件的所有实现代码都在sendimpl.pas里面,另外我又建立一个测试用的testform,这个测试程序直接包含sendimpl.pas就好了,很方便。
    3. Delphi需要被外部调用的最好都是函数function,不要有过程procedure,我测试PowerBuilder调用过程总有问题。
    4. Delphi每个需要被外部调用的函数都声明为stdcall调用。
    5. Delphi需要被外部调用的函数里面如果有字符参数或者返回值,都用PChar类型,不要用String。

    下面是一些参考代码片段:
    1. Delphi里面的函数定义

    function incvalue(const x: Integer): Integer; stdcall;
    function UpperString(Msg: PChar): PChar; stdcall;
    function SendMessageFile(sFile: PChar): Integer; stdcall;

    2. Delphi里面声明需要被外部调用的函数

    exports incvalue, UpperString, SendMessageFile;

    3. PowerBuilder里面的外部函数声明

    FUNCTION long incvalue(long fdf) Library "M:\projects\sendmail\sendmail.dll" 
    FUNCTION int SendMessageFile( string sFile) Library "M:\projects\sendmail\sendmail.dll" 
    FUNCTION string UpperString( string sFile) Library "M:\projects\sendmail\sendmail.dll" 

    https://files.cnblogs.com/eastson/sendmail.rar

  • 相关阅读:
    Nginx的Mainline version、Stable version、Legacy version的版本区别
    十个程序员必备的网站推荐
    各大OJ题目分类
    ubuntu 12 安装bcm 43142无线网卡驱动
    unp.h
    Linux优秀软件整理
    陈皓一起写Makefile 概述
    开源资源目录
    (三)鸟哥Linux读书笔记
    CSS3实现选项卡
  • 原文地址:https://www.cnblogs.com/eastson/p/2722134.html
Copyright © 2020-2023  润新知