DCOM C/S Question |
答題得分者是:jieshu
|
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
請問各位大大...我想利用DCOM寫兩個Automation Object...分別為Client及Server端的物件
在Server會新增一個Remote Data Module...而在裡面加了一個函數叫myFunc
在Client使用TDCOMConnection去連TDCOMConnection.Connected:=True是可以連成功的(ServerName沒錯)
但當我在Client使用TDCOMConnection.AppServer.之後..就無法列舉到myFunc...
請問我錯在哪?是因為Server端不能寫成物件...亦或是少了一些步驟呢?還請各位先進幫幫我..謝謝!! 力求神乎奇技
------
力求神乎奇技 | ||
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|||
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
請將Client端程式的Delphi Project Managemet加入
Server的已建構好的?????_TLB.pas好讓Client端可Uses到.
下列為Client端程式碼
unit ord210u1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Mask, DBCtrls, StdCtrls, DB, DBClient, MConnect, dbcgrids, ComCtrls, ExtCtrls, DBTables, Grids, DBGrids, SConnect, ordserver_TLB; type Tford = class(Tform) dcc: TDCOMConnection; ...... private aDisp: IorddmallDisp; //App Server介面 ...... procedure Tford.FormCreate(Sender: TObject); begin aDisp := IorddmallDisp(IDispatch(dcc.AppServer)); end; procedure Tford.FormCreate(Sender: TObject); var ss: String; begin ss := aDisp.myFunc('123'); end; 如此當Client端程式輸入aDisp.便可列舉出Server端所有方法Delphi follower
------
Delphi |
||
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
感謝諸位大大的回應...
ying兄....我試了您的方法...列舉方法已經可行了...但您的兩個FormCreate看不是很清楚..
因我在Client用一個簡易的Appliction Form..在上面加一個Button1..執行如下程式碼
procedure TForm1.Button1Click(Sender: TObject);
var
ss:String;
begin
aDisp := IorddmallDisp(IDispatch(dcc.AppServer));
ss := aDisp.myFunc('123');
end; myFunc是可以列舉成功...但在執行時不論用property或是method都會有錯
===property===
ss:=aDisp.prop;
===error===
Access violation at address xxxxx. Read of address xxxxx
===method===
ss:=aDisp.myFunc(); //物件會傳回一個test的wideString
===error===
Access violation at address xxxxx. Write of address xxxxx 而我Server端的物件是先新增一個ActiveX Library..再新增一個Remote Data Module... 不知是哪裡出了問題?感謝您的解答... 力求神乎奇技
------
力求神乎奇技 |
||
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
|||
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
Sorry,貼太快了
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ord000_TLB, StdCtrls, DB, DBClient, MConnect; type TForm1 = class(TForm) dcc: TDCOMConnection; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } aDisp: IorddmallDisp; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var str: String; begin str := aDisp.get_table_value('bas_colors','colr_no','colr_name','10',False); showmessage(str); end; procedure TForm1.FormCreate(Sender: TObject); begin aDisp := IorddmallDisp(IDispatch(dcc.AppServer)); end; end. 以上我試正常可RUN.Delphi follower
------
Delphi |
||
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
抱歉...想再請教一個問題...不知要如何部署DCOM
1.Server端已寫成一個dll //具有一個方法叫GetComputerName
2.Client寫成一個exe //DCOMConnection的設定如下
ServerName:='coTest.Test';
ComputerName:='Nbsan';
3.在本機電腦(nbSan)上測試.. //
aDisp.GetComputerName //傳回nbSan..測試成功
4.把Client.exe複製到別台電腦(pcSan)然後執行.. //出現類別未登錄 Question:是不是每台電腦都要裝註冊Server.dll呢?但好像有不符合DCOM的精神耶...不知要如何implement...感謝賜教...謝謝!! 力求神乎奇技
------
力求神乎奇技 |
||
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
|||
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
不行耶...我爬文找到一篇文章
http://delphi.ktop.com.tw/topic.php?topic_id=21432
跟我是一樣的問題...不知解決沒?
我也看了Server端的Type Library所需use的dll...發現有midas.dll...stdvcl40.dll...stdold2.tlb...我都把他複製到Client的system32底下..也使用了regsvr32註冊他....甚至把Server的dll拿到Client端去註冊..也把DCOM.ComputerName設成IP...結果仍是一樣的錯誤"類別未登錄"
不知是不是因為AppServer不能寫成dll丫...若把架構改成COM 不知能不能解? 力求神乎奇技
------
力求神乎奇技 |
||
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
|||
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
|||
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
|||
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
|||
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: jieshu版主..我已照文件設定了權限...但我想類別未登錄的錯誤訊息應該無法識別到遠端物件的ProgID...或是本機端未註冊一些物件無法取得類別所致吧.. 力求神乎奇技有道理,那寫個簡單的連線測試程式(可改屬性的,如ServerName, ComputerName)測看看,先在Server上,Client/Server同一台測試看看,沒問題再由另一台當Client連到Server試試看。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
San
一般會員 發表:11 回覆:15 積分:5 註冊:2002-06-27 發送簡訊給我 |
引言: 有道理,那寫個簡單的連線測試程式(可改屬性的,如ServerName, ComputerName)測看看,先在Server上,Client/Server同一台測試看看,沒問題再由另一台當Client連到Server試試看。[/green]嗯..這我也試過了說...我那兩台電腦(XP & 2003)把C/S的程式各別在同一台腦上Run都沒問題...但只要把C/S分成兩台Run..改ComputerName...兩台C/S也互換了...結果仍相同 我試在Client(nbSan)...把DCOMConnection.ComputerName設成pcSan... 然後按ServerName的Combobox...列舉出來也僅是nbSan的ProgID說...不知這樣正不正常? 力求神乎奇技
------
力求神乎奇技 |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我試在Client(nbSan)...把DCOMConnection.ComputerName設成pcSan... 然後按ServerName的Combobox...列舉出來也僅是nbSan的ProgID說...不知這樣正不正常? 力求神乎奇技正常阿,Delphi只是幫你列出本機有註冊的程式,在同一台電腦可以,分成兩台就不行,應該就是權限的問題,兩台電腦如果登入帳號一樣的話,密碼就也要一樣,不一樣的話就要有同樣的帳號存在。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |