Delphi 電子發票開發

業務上的需求要開發電子發票的模組,前同事給了Delphi 6的範例程式,經過了一番修改後,終於在 Delphi XE3能正確使用了。
6337-1

主要的問題如下:

1) Char改 AnsiChar

2) PChar改 PAnsiChar

3) String 改 AnsiString

4) XE3 Length取長度時,也需要先以AnsiString才會正確。
主要加密元件宣告

[pascal]
procedure QRCodeINV(a_InvoiceNumber: AnsiString;
a_InvoiceDate: AnsiString;
a_InvoiceTime: AnsiString;
a_RandomNumber: AnsiString;
af_SalesAmount: Double;
af_TaxAmount: Double;
af_TotalAmount: Double;
a_BuyerIdentifier: AnsiString;
a_RepresentIdentifier: AnsiString;
a_SellerIdentifier: AnsiString;
a_BusinessIdenti: AnsiString;
a_AESKey: AnsiString;
a_output: pAnsiChar;
var ai_errorCode : Integer) STDCALL; external ‘QRDLL.DLL’;

[/pascal]

附上電子發票開發需要文件:

二代電子發票加解密API文件下載

作者: 林壽山

林壽山 軟體公司專案經理,第三方支付設計,金流設計,行動支付設計,支付寶,微信,街口支付,信用卡機,擅長PHP網頁設計(CodeIgniter、Laravel)框架、Delphi程式設計、資料庫設計、C# WinForm/WebForm程式設計

在〈Delphi 電子發票開發〉中有 8 則留言

  1. 林老師:請幫忙,
    我試瞭好久都有問題
    我試Delpgi7
    procedure QRCodeINV(a_InvoiceNumber: String;
    a_InvoiceDate: String;
    a_InvoiceTime: String;
    a_RandomNumber: String;
    af_SalesAmount: Double;
    af_TaxAmount: Double;
    af_TotalAmount: Double;
    a_BuyerIdentifier: String;
    a_RepresentIdentifier: String;
    a_SellerIdentifier: String;
    a_BusinessIdenti: String;
    a_AESKey: String;
    a_output: PChar;
    var ai_errorCode : Integer);stdcall;far; external ‘QRDLL.dll’;

    procedure TForm1.Button4Click(Sender: TObject);
    var out1:^PChar;
    errorCode :^integer;
    begin
    QRCodeINV(‘YC85658988’, ‘1021226’, ‘223344’, ‘3456’, 1000000, 50,1050, ‘00000000’, ‘00000000’, ‘83300307’, ‘83300307’, ‘66668888’,pAnsiChar(out1),errorCode);

    end;

    一直有問題……謝謝

  2. 執行後發生以下錯誤訊息
    請老師幫忙
    Access violation at address 100036FB in ‘QRDLL.dll’ Write of address 00458440

  3. 執行後發生
    Access violation at address 100036FB in module ‘QRDLL.dll’ Write of address 004584600

    請幫忙,謝謝!

  4. 執行後發生
    Access violation at address 100036FB in module ‘QRDLL.dll’ Write of address 004584600

    請幫忙,謝謝!

  5. procedure QRCodeINV(a_InvoiceNumber: String;
    a_InvoiceDate: String;
    a_InvoiceTime: String;
    a_RandomNumber: String;
    af_SalesAmount: Double;
    af_TaxAmount: Double;
    af_TotalAmount: Double;
    a_BuyerIdentifier: String;
    a_RepresentIdentifier: String;
    a_SellerIdentifier: String;
    a_BusinessIdenti: String;
    a_AESKey: String;
    a_output: pChar;
    var ai_errorCode : Integer);safecall ; far; external ‘QRDLL.dll’ ; //;

    implementation

    {$R *.dfm}

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
    out1:string;
    errorCode :integer;
    begin
    SetLength (out1, 78);
    QRCodeINV(‘AS45678000’, ‘1001231’, ‘223344’, ‘3456’, 1000000, 50,1050, ‘00000000’, ‘00000000’, ‘83300307’, ‘83300307’, ’05D4A324ABAF4A570E64E572221E438B’,pChar(out1),errorCode);
    showmessage(inttostr(errorCode));
    showmessage(out1);
    end;

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料