vb6如何調用delphi DLL中的函數並返回字符串?

1,問題描述 

最近發現vb6調用delphi DLL中的函數並返回字符串時出現問題,有時正常,有時出現?號,有時乾脆致使VB程序退出函數

2019-01-18 13:18:51 將金額數字轉化爲可讀的語音文字:1轉化爲1元 ????@                元  ????    og\SS_log.txt .eP   K      :   

2,緣由分析

delphi中函數聲明以下:spa

function ss_ConvertMoney2Str(mmje:double): PChar; stdcall; 

VB6中對應的函數聲明以下:.net

Public Declare Function ss_ConvertMoney2Str Lib "SSDuan.dll" (ByVal mmje As Double) As string

 

因其中涉及字符串從delphi中返回給VB,因此懷疑與內存有關。code

將Sharemem在DLL工程中引用,並在VB程序目錄中放入BORLNDMM.dll文件。問題依舊。blog

 

在網上查到下面文章,很是詳細地說明了調用方法。解決了問題。感謝原做者。接口

https://blog.csdn.net/marz07101/article/details/8127351內存

 

3,解決方案

在delphi中增長一個函數聲明以下,採用pres返回字符串。rem

function ss_ConvertMoney2Str4VB(mmje:double; pres:PChar): integer;  stdcall;字符串

 

在VB6中,聲明接口以下string

Public Declare Function ss_ConvertMoney2Str4VB Lib "xxx.dll" (ByVal mmje As Double, ByVal result As String) As Integer

 

在調用函數時,第二個實參聲明爲string,且要事先分配內存。

Private Sub Command2_Click()
  Dim convMoney As String
  Dim res As Integer
  convMoney = Space(255)

  res = ss_ConvertMoney2Str4VB(Val(Text1.Text), convMoney)
相關文章
相關標籤/搜索