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. 林壽山表示:

    QrDLL.dll有在執行檔路徑?
    出單機支援QRcode?

  3. 田景榮表示:

    QrDLL.dll 有在執行檔路徑

    出單機有支援QRcode

  4. 田景榮cces表示:

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

  5. 田景榮表示:

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

    請幫忙,謝謝!

  6. 田景榮表示:

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

    請幫忙,謝謝!

  7. 田景榮表示:

    方便將源碼賣給我嗎? 費用多少?

  8. 匿名訪客表示:

    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 如何處理網站訪客的留言資料