Delphi DLL 與VB6 傳送字串

2021-10-10 12:23:22 字數 1904 閱讀 1440

innosetup有乙個重要功能就是呼叫外部dll,它本身是用delphi寫的,帶的script也基本上類同delphi,因此,掛delphi dll比較好,只是自帶的sample太過簡單。傳值返值一般的計算功能呼叫還是比較簡單,但傳遞字串還是很不同。網上轉了轉,五花八門說啥的都有,我的解題可能不太一樣。思路是這樣的:vb6用byref傳送字串,delphi用var p1: pchar,接收字串,在dll中處理字串,然後通過 var p2: pchar,返回給vb6; 要注意一是dll接收了不要改變原來的記憶體位址或指標,即便在dll做了很多處理,最後返時也只能是將處理過的內容考貝到原來的位址。二是本地處理後要有一塊連續的記憶體將處理過的字串放進去,再考貝給p2,於是呢,程式就寫成下面的樣子:

delphi程式dll

function backstring(var p1: pansichar; var p2: pansichar): integer; stdcall;

vars: string;

p: pchar;

begin

s := 'abcdefg' + strpas(p1);

p := stralloc(255);

strpcopy(p, s);

strpcopy(p2, p);

strdispose(p);

backstring :=0;

end;

vb6程式呼叫dll

declare function backstring lib "g:\mydelphi2010\instadll\instadll.dll" (byref a1 as string, byref a2 as string) as long

private sub command1_click()

s1$ = "123456789012345678901234567890"

s2$ = string$(255, "a")

list1.clear

r = backstring(s1$, s2$)

list1.additem (cstr(1) + " " + trim(s2$))

end sub

注:vb6 做個form,上面放乙個command button,再放乙個listbox

在程式設計環境下執行,會在listbox1上看到返回字串 abcdefg1234567........,其中abcdefg是dll加上去的、1234567......是vb6送給它的。字串操作是借助於記憶體完成的,不管它怎麼變,最後把整塊記憶體的東西返回去就是了,否則很容易引發怪毛病,畢竟是在不同的開發環境約定下互動操作。

如果vb6送整數和字串,delphi dll可寫為:

function backstring1(intparam1: integer; var p2: pansichar): integer; stdcall;

vars: string;

p: pchar;

begin

s := 'abcdefg ' + inttostr(intparam1) + ' abcdefg';

p := stralloc(255);

strpcopy(p, s);

strpcopy(p2, p);

strdispose(p);

backstring1 :=0;

end;

vb6相應的寫為

declare function backstring1 lib "g:\mydelphi2010\instadll\instadll.dll" (byval a1 as long, byref a2 as string) as long

delphi的integer型在vb6裡用long型,用錯了返回值由於溢位而成負數、返非所欲的。

csdn用的不熟,加了粗體h3標記,嗯,挺好。還有影象、圖表、公式挺多功能的,以後慢慢的努力豐富博文內容和表現形式。

C 初學6 傳送郵件

1 qq郵箱 設定 賬戶 smtp服務開啟 2 webconfig配置傳送郵箱 password為開啟smtp服務時的驗證碼 3 例項化乙個傳送郵件類。mailmessage mailmessage new mailmessage 發件人郵箱位址,方法過載不同,可以根據需求自行選擇。new mail...

centos6傳送郵件

簡單介紹 centos是乙個非常不錯的免費開源linux系統,許多站點首選的平台。然而centos預設不能傳送郵件,需要傳送郵件的童鞋可以安裝乙個sendmail程式 1.安裝軟體 yum install mailx2建立乙個可執行檔案並寫入以下內容 vim a.sh bin bash mkdir ...

VB6程式與Windows Vista的相容問題

windows vista開始逐漸進入市場,微軟對 indows xp的支援大限已經日時不多,ista的流行是勢在必然 雖著企業使用者作業系統的公升級,以前開發的visual studio basic 6程式與vista的相容性問題漸漸浮出水面 微軟在官方 上發布了windows vista 上的 ...