Client端SocketConnection無法呼叫到我Server已定義好的Function |
尚未結案
|
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
|||
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我使用C Builder來練習李維的"分散式架構系統篇" 目前看到2-28頁,正在寫Client端程式 但是使用他所寫的SocketConnection 卻呼叫不到我Server端已定義好的Function 我是這樣寫的SocketConnection1->AppServer.xxxxx xxxx列表中沒出現我已經於Server定義好的GetAllTables Function 請問這是為什麼呢?是不是我還有哪裡的設定或呼叫方式錯誤呢 謝謝這是正常的,因為AppServer是Variant型態,所以Help(Code Insight)帶不出來,只能依自己定義去寫,不過好像可以在Client程式加入Server的Type Library,然後依其所定義,做介面處理,便可帶出Help(Code Insight)。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言: 一.要看你的 FUNCTION 是如何定義的,如果是透過 REMOTEDATA 的介面,那你要看當你設好 SocketConnection 時, SERVER 端的程式是否有執行起來,一般來講,要不你 SERVER 的方法尚未註冊,就是你的介面方法並不是定義在 IApserver 上 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福 Thomas Chiou你好,我是使用RemoteDataModule建立的,我已確定執行Server程式, 至於註冊,書上說執行就已註冊不是? 我確定我是定義於IAppserver上沒錯(因為是照書本上做的) |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:謝謝你,對於Variant這型態我也是第一次接觸到,其實也不太清楚為什麼AppServer是使用該種型態,還有為什麼help無法帶出. 那麼想請問一下,您說要自己寫定義,是怎麼個寫法呢?已經於AppServer中寫好code了,那Client要怎麼去寫呢? 至於Type Library寫定義,是否代表我要在Client增加RemotDataModule呢 謝謝引言: 我使用C Builder來練習李維的"分散式架構系統篇" 目前看到2-28頁,正在寫Client端程式 但是使用他所寫的SocketConnection 卻呼叫不到我Server端已定義好的Function 我是這樣寫的SocketConnection1->AppServer.xxxxx xxxx列表中沒出現我已經於Server定義好的GetAllTables Function 請問這是為什麼呢?是不是我還有哪裡的設定或呼叫方式錯誤呢 謝謝這是正常的,因為AppServer是Variant型態,所以Help(Code Insight)帶不出來,只能依自己定義去寫,不過好像可以在Client程式加入Server的Type Library,然後依其所定義,做介面處理,便可帶出Help(Code Insight)。 |
||
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
最偷吃步的方法就是如 jieshu 大大所說的將 Server的Type Library 加到 client 端,也就是將 server 端的 XXX.tlb copy 到 client 程式的目錄,並 在 client 端 use 此檔案,唯一的壞處就是只要 server 端介面有改,就得在 copy 更新 client 端的 zxxx.tlb ,但好處是實現 table despatch 容易,這是比 late bindding 好的方法,因為你用 socketconnection 就無法使用 dcomconnection 的傳介面的方法 如果愛情也有味覺
那麼 有沒有ㄧ種愛
微微泛酸 不太苦澀 有點甜密
嚐起來的滋味讓人想起幸福
Thomas Chiou
------
Thomas Chiou |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 謝謝你,對於Variant這型態我也是第一次接觸到,其實也不太清楚為什麼AppServer是使用該種型態,還有為什麼help無法帶出. 那麼想請問一下,您說要自己寫定義,是怎麼個寫法呢?已經於AppServer中寫好code了,那Client要怎麼去寫呢? 至於Type Library寫定義,是否代表我要在Client增加RemotDataModule呢 謝謝Client呼叫範例如下:Is_rdm_mainDisp是Type Library裡已定義好的dispinterface Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables 不是寫定義,是要做介面的處理,如上。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:這裡很謝謝兩位的回覆,針對你們所說的方法,我會先試試看的 (因為還不是非常了解) 順便想請問一下,為什麼我看這本書會發生那麼多的問題呢,是否我對於很多基礎的部分還不甚了解,所以才會這樣子,能否請問一下,像討論到的這些,哪本書籍或是網站有介紹呢?亦或是,直接k英文的help檔? 謝謝你們引言: 謝謝你,對於Variant這型態我也是第一次接觸到,其實也不太清楚為什麼AppServer是使用該種型態,還有為什麼help無法帶出. 那麼想請問一下,您說要自己寫定義,是怎麼個寫法呢?已經於AppServer中寫好code了,那Client要怎麼去寫呢? 至於Type Library寫定義,是否代表我要在Client增加RemotDataModule呢 謝謝Client呼叫範例如下:Is_rdm_mainDisp是Type Library裡已定義好的dispinterface Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables 不是寫定義,是要做介面的處理,如上。 |
||
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:你好,我不太了解,您說的Is_rdm_mainDisp是已定義在Server端的還是另在Client端定義的呢? 另外,Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables ==>這是要寫在哪的呢? 謝謝你引言: 謝謝你,對於Variant這型態我也是第一次接觸到,其實也不太清楚為什麼AppServer是使用該種型態,還有為什麼help無法帶出. 那麼想請問一下,您說要自己寫定義,是怎麼個寫法呢?已經於AppServer中寫好code了,那Client要怎麼去寫呢? 至於Type Library寫定義,是否代表我要在Client增加RemotDataModule呢 謝謝Client呼叫範例如下:Is_rdm_mainDisp是Type Library裡已定義好的dispinterface Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables 不是寫定義,是要做介面的處理,如上。 |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 你好,我不太了解,您說的Is_rdm_mainDisp是已定義在Server端的還是另在Client端定義的呢? 另外,Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables ==>這是要寫在哪的呢? 謝謝你Server端才有Type Library,用dispinterface在Type Library裡找,你就可以找到你定義好的Function在他下面。 Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables這是你在Client呼叫的方式。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:謝謝,再請問一個笨問題 請問...什麼是dispinterface阿? 他有什麼作用嗎?引言: 你好,我不太了解,您說的Is_rdm_mainDisp是已定義在Server端的還是另在Client端定義的呢? 另外,Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables ==>這是要寫在哪的呢? 謝謝你Server端才有Type Library,用dispinterface在Type Library裡找,你就可以找到你定義好的Function在他下面。 Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables這是你在Client呼叫的方式。 |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 謝謝,再請問一個笨問題 請問...什麼是dispinterface阿? 他有什麼作用嗎?我只知道Interface是介面,有些介面的事件會放在DisInterface,並不很了解分成這樣的用是,我對於這些的認知都是從慢慢的程式撰寫而了解,但是有些又不是很了解,可能還沒到那個程度吧。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:請問,Is_rdm_mainDisp這個處理,要怎麼寫呢@@ 要怎麼寫才能正確的由我的SocketConnection1所帶出引言: 你好,我不太了解,您說的Is_rdm_mainDisp是已定義在Server端的還是另在Client端定義的呢? 另外,Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables ==>這是要寫在哪的呢? 謝謝你Server端才有Type Library,用dispinterface在Type Library裡找,你就可以找到你定義好的Function在他下面。 Is_rdm_mainDisp(SocketConnection1.GetServer).GetAllTables這是你在Client呼叫的方式。 |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 請問,Is_rdm_mainDisp這個處理,要怎麼寫呢@@ 要怎麼寫才能正確的由我的SocketConnection1所帶出不如你上傳你的程式碼還比較快, 我真不曉得怎麼形容了, s_rdm_main是我RemoteDataModule的名稱, Is_rdm_mainDisp是由Delphi依RemoteDataModule名稱自動產生的Type Library的介面定義, Client Uses Type Library的Unit即可用Is_rdm_mainDisp(SocketConnection1.GetServer)呼叫定義好在Type Library的Function或...
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:真是不好意思 以下是我依照書中2-1-4寫下的GetAllTables的Funtion(可能有問題,不過先試做) STDMETHODIMP TTest0628Impl::GetAllTables(VARIANT* vTables) { TStringList* tblList = new TStringList; int iCount; Test0628->ADOConnection1->GetTableNames(tblList); *vTables=VarArrayCreate(0,(*tblList).Count-1,varVariant); for(iCount=0;(*tblList).Count-1;iCount ,vTables ) { AnsiString(vTables)=(*tblList).Strings[iCount]; } delete tblList; return S_OK; } 我的問題在於,Client中的連結Button寫下 SocketConnection1->GetServer().xxxxx xxxx帶不出我所要的GetAllTables Funtion 抱歉之前一直以為您說的 Is_rdm_mainDisp是另外自己寫的Funtion 不知道這樣貼是否看的懂@_@"引言: 請問,Is_rdm_mainDisp這個處理,要怎麼寫呢@@ 要怎麼寫才能正確的由我的SocketConnection1所帶出不如你上傳你的程式碼還比較快, 我真不曉得怎麼形容了, s_rdm_main是我RemoteDataModule的名稱, Is_rdm_mainDisp是由Delphi依RemoteDataModule名稱自動產生的Type Library的介面定義, Client Uses Type Library的Unit即可用Is_rdm_mainDisp(SocketConnection1.GetServer)呼叫定義好在Type Library的Function或... |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: STDMETHODIMP TTest0628Impl::GetAllTables(VARIANT* vTables) 我的問題在於,Client中的連結Button寫下 SocketConnection1->GetServer().xxxxx xxxx帶不出我所要的GetAllTables Funtion 抱歉之前一直以為您說的 Is_rdm_mainDisp是另外自己寫的Funtion 不知道這樣貼是否看的懂@_@"這樣還是看不出你RDM的名稱, 是Test0628Impl嗎? 且不曉得BCB和Delphi有沒有一樣, 還是你要自己試試看或要貼上Type Library的Source Code, SocketConnection1->GetServer().是絕對沒有辦法代出定義的, 一定要加上介面才有辦法, 但即使沒有帶出Function, 也是可以直接依定義使用的, 就像使用OleControl.
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:我的RDM名稱是"Test0628" 應該是,我開Type Library看的 (一開始設定的CoClass Name嗎?) 不過您說直接用,是像這樣子寫在Client嗎: Test0628(SocketConnection1->GetServer().GetAllTables); 不過他都會說找不到Test0628此function引言: STDMETHODIMP TTest0628Impl::GetAllTables(VARIANT* vTables) 我的問題在於,Client中的連結Button寫下 SocketConnection1->GetServer().xxxxx xxxx帶不出我所要的GetAllTables Funtion 抱歉之前一直以為您說的 Is_rdm_mainDisp是另外自己寫的Funtion 不知道這樣貼是否看的懂@_@"這樣還是看不出你RDM的名稱, 是Test0628Impl嗎? 且不曉得BCB和Delphi有沒有一樣, 還是你要自己試試看或要貼上Type Library的Source Code, SocketConnection1->GetServer().是絕對沒有辦法代出定義的, 一定要加上介面才有辦法, 但即使沒有帶出Function, 也是可以直接依定義使用的, 就像使用OleControl. |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我的RDM名稱是"Test0628" 應該是,我開Type Library看的 (一開始設定的CoClass Name嗎?)應該是 不過您說直接用,是像這樣子寫在Client嗎: Test0628(SocketConnection1->GetServer().GetAllTables); 不過他都會說找不到Test0628此function你要Uses Type Library的Unit, 且在該Unit內要有介面的定義, 如ITest0628Disp, 然後將SocketConnection1.GetServer轉型成這個介面, 用ITest0628Disp(SocketConnection1.GetServer), 這樣就可列舉此介面的方法和屬性.以上是Delphi語法, BCB可能是ITest0628Disp(SocketConnection1->GetServer)->GetAllTables吧!(不曉得BCB轉型是怎麼寫的)
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:謝謝您,不過這句我看不太懂呢 "且在該Unit內要有介面的定義,如ITest0628Disp" 這樣的定義,該如何寫,又,是該寫在哪呢? 另一個問題...就是 getserver這個function,我以前沒用過@@ 查詢help上是寫...傳回ap server的interface...是嗎(英文不太好)引言: 我的RDM名稱是"Test0628" 應該是,我開Type Library看的 (一開始設定的CoClass Name嗎?)應該是 不過您說直接用,是像這樣子寫在Client嗎: Test0628(SocketConnection1->GetServer().GetAllTables); 不過他都會說找不到Test0628此function你要Uses Type Library的Unit, 且在該Unit內要有介面的定義, 如ITest0628Disp, 然後將SocketConnection1.GetServer轉型成這個介面, 用ITest0628Disp(SocketConnection1.GetServer), 這樣就可列舉此介面的方法和屬性.以上是Delphi語法, BCB可能是ITest0628Disp(SocketConnection1->GetServer)->GetAllTables吧!(不曉得BCB轉型是怎麼寫的) |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 謝謝您,不過這句我看不太懂呢 "且在該Unit內要有介面的定義,如ITest0628Disp" 這樣的定義,該如何寫,又,是該寫在哪呢? 另一個問題...就是 getserver這個function,我以前沒用過@@ 查詢help上是寫...傳回ap server的interface...是嗎(英文不太好)一般你Server程式在Type Library上定義好Function後, 就會有, 你到底有沒有到Type Library的Unit仔細看看呢? 沒錯, 英文不用很好, 只要看的懂就可以.
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:您好,意思是說,這樣的定義,在我寫完function之後就有囉?我是有找到ITest0628Disp.只不過,寫再Client做介面的轉換時(ITest0628Disp),都會顯示未定義的,這個.....引言: 謝謝您,不過這句我看不太懂呢 "且在該Unit內要有介面的定義,如ITest0628Disp" 這樣的定義,該如何寫,又,是該寫在哪呢? 另一個問題...就是 getserver這個function,我以前沒用過@@ 查詢help上是寫...傳回ap server的interface...是嗎(英文不太好)一般你Server程式在Type Library上定義好Function後, 就會有, 你到底有沒有到Type Library的Unit仔細看看呢? 沒錯, 英文不用很好, 只要看的懂就可以. |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 您好,意思是說,這樣的定義,在我寫完function之後就有囉?我是有找到ITest0628Disp.只不過,寫再Client做介面的轉換時(ITest0628Disp),都會顯示未定義的,這個.....是的. 你有Uses嗎? 不曉得在BCB的Uses是什麼? 在Delphi要Uses那個Unit才能用那個Unit裡的東西.
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:阿...抱歉,我真是蠢= = 因為不知道Delphi的uses是什麼意思,還以為是直接翻中文= = 原來是c的include的意思,可以了,也找的到自訂的function了,真的很謝謝你~~ 只是不知道,是不是以後要在server寫function,都要像這樣把TLB的檔案include進去client才能使用< >< > 真的很謝謝你,指教了那麼多,感激不盡~~引言: 您好,意思是說,這樣的定義,在我寫完function之後就有囉?我是有找到ITest0628Disp.只不過,寫再Client做介面的轉換時(ITest0628Disp),都會顯示未定義的,這個.....是的. 你有Uses嗎? 不曉得在BCB的Uses是什麼? 在Delphi要Uses那個Unit才能用那個Unit裡的東西. |
||
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |