最近發現vb6調用delphi DLL中的函數並返回字符串時出現問題,有時正常,有時出現?號,有時乾脆致使VB程序退出函數
2019-01-18 13:18:51 將金額數字轉化爲可讀的語音文字:1轉化爲1元 ????@ 元 ???? og\SS_log.txt .eP K :
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內存
在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)