全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1864
推到 Plurk!
推到 Facebook!

如何宣告 Variant 陣列 ?

缺席
boson
中階會員


發表:71
回覆:154
積分:85
註冊:2004-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-11-04 00:28:07 IP:114.35.xxx.xxx 訂閱
MDaemon 是一套郵件伺服器軟體, 它提供了一些 API, 可供我們用程式呼叫, 以進行各項操作
網路上有一段呼叫 MDaemon API 以取得所有域名的程式, 是 ASP 寫的, 如下


[code vb]
DIM oMDUser
DIM Domains
DIM DomainNames()
SET oMDUser = CreateObject("MDUserCOM.MDUser")
IF oMDUser.LoadUserDll() = True THEN
Domains = oMDUser.GetDomainCount
response.Write "共有" & Domains & " 個域名."
oMDUser.GetDomainNames(DomainNames)
FOR i = 0 to Domains - 1
response.write DomainNames(i) &" "
next
ELSE
response.write "Error Loading MDUserCom"
END IF
Set oMDUser = NOTHING
[/code]

我想要將其改為用 Delphi 來寫, 但執行發生錯誤, 程式如下:

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
oMDUser : variant;
Domains:integer;
DomainNames:Variant; // 不知宣告為 Variant 是否正確 ?
i:integer;
begin
oMDUser:=CreateOleObject('MDUserCOM.MDUser');
if oMDUser.LoadUserDll then begin
Domains:=oMDUser.GetDomainCount;
ShowMessage('共有 ' IntToStr(Domains) ' 個域名');
DomainNames := VarArrayCreate([0, Domains-1], varOleStr); // 此處不知該如何建立 DomainNames
oMDUser.GetDomainNames(DomainNames);
for i:=1 to Domains do begin
end;
end;
end;

[/code]

程式在 oMDUser.GetDomainNames(DomainNames); 這一行, 出現【類型不相符】的錯誤訊息
可能是 GetDomainNames 所需要傳入的參數型態, 跟我所宣告的 DomainNames 不符
原來 ASP 程式的 DomainNames 宣告為 DIM DomainNames()
而在 Delphi 中, 我就不知道該如何宣告 DomainNames
有網友知道的嗎 ? 麻煩提點一下, 謝謝 !

tuga
高階會員


發表:16
回覆:105
積分:104
註冊:2002-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-11-04 13:57:36 IP:1.34.xxx.xxx 訂閱
using c#
http://lists.altn.com/WebX/.5985ff29


System.Array DomainNames = null;

mdu.GetDomainNames (out DomainNames);

foreach (string d in DomainNames)
{
Console.WriteLine ("\t" d);
}

about system.array in delphi
http://www.devsuperpage.com/search/Articles.asp?ArtID=138235
Which is the correct syntax for declaring an array of type System.Array?



boson
中階會員


發表:71
回覆:154
積分:85
註冊:2004-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-11-04 16:42:30 IP:114.35.xxx.xxx 訂閱
一直搞不定, 後來我改用 import a type library , 將 MDUserCOM.dll 引入產生一個 _TLB 宣告檔
use 這個宣告檔, 就可以產生各個介面, 藉以控制 MDaemon 進行各種設定
系統時間:2017-10-23 14:04:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!