TypeLibrary中的Read/Write By Ref 為何用途 |
答題得分者是:mustapha.wang
|
suda
一般會員 發表:17 回覆:63 積分:16 註冊:2002-05-10 發送簡訊給我 |
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
引言: 請問大家,TypeLibrary中的Read/Write By Ref 為何用途 是否與 Delphi中的var方式相同,而在遠端如dcom/Socket中可否使用?是的,write by ref是以var参数传递,如: ITest = interface(IAppServer) ['{59B4041B-42CE-49DA-96DF-619861F02E2B}'] function Get_Property1: Integer; safecall; procedure Set_Property1(Value: Integer); safecall; function Get_Property2: Integer; safecall; procedure Set_Property2(Value: Integer); safecall; procedure _Set_Property2(var Value: Integer); safecall; property Property1: Integer read Get_Property1 write Set_Property1; property Property2: Integer read Get_Property2 write Set_Property2; end;注意Property2,它的write方法为Set_Property2,而不是_Set_Property2,因此如果要传回值,不要写AppServer.Property2:=xxx;而应该用AppServer._Set_Proeprty2(xxx); 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
suda
一般會員 發表:17 回覆:63 積分:16 註冊:2002-05-10 發送簡訊給我 |
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
引言: 感謝你再次解惑! 那在param 中使用 variant* 或 variant** 與by ref 有何不同 還只是寫法的不同? 我想如果透過SocketServer 或 DCOM.createRemote 使用by ref, 把遠端的資料位址對應過來本機可行嗎?還是我的想法太天真write by ref是定义property时使用的,与variant *都在delphi映射为var,都是可以传回值的,当然Socket/DCOM可以用它传回资料,不是天真想法。 variant**映射为POLEVariant;企图传递一个指针,不支持,编译不过。 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
suda
一般會員 發表:17 回覆:63 積分:16 註冊:2002-05-10 發送簡訊給我 |
write by ref是定义property时使用的,与variant *都在delphi映射为var,都是可以传回值的,当然Socket/DCOM可以用它传回资料,不是天真想法。
variant**映射为POLEVariant;企图传递一个指针,不支持,编译不过。 那麼 ** 只是用來傳遞Interface的指標對吧!
而 使用 *或by ref 是相同的作用結果只是使用方式不同
以 by ref 的方式read/write遠端的property ,dcom 會將遠端的指標
對應到本地端的指標,以減少資料的傳遞,所以在傳遞大的資料時會增加效率
這樣的結論對嗎?
而以Socket的方式也可以嗎?我想Dcom是用RPC的方式所以沒問題吧!
我有作過一個測試用DCOM及Socket的方式呼叫IAppserver的一個Interface A
,再由Interface A傳回Intercace B,是個無聊的測試,結果DCom可
,而Socket不可故推測以socket不可操作遠端的指標 另請教TypeLibrary中的節點是否可以移動順利,我有試過直接搬[TEXT]的文字資料,不過會產生錯誤,不知你是否有方法 謝謝!! 發表人 - suda 於 2003/12/24 22:56:59
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
引言: 那麼 ** 只是用來傳遞Interface的指標對吧! 而 使用 *或by ref 是相同的作用結果只是使用方式不同 以 by ref 的方式read/write遠端的property ,dcom 會將遠端的指標 對應到本地端的指標,以減少資料的傳遞,所以在傳遞大的資料時會增加效率 這樣的結論對嗎? 而以Socket的方式也可以嗎?我想Dcom是用RPC的方式所以沒問題吧! 我有作過一個測試用DCOM及Socket的方式呼叫IAppserver的一個Interface A ,再由Interface A傳回Intercace B,是個無聊的測試,結果DCom可 ,而Socket不可故推測以socket不可操作遠端的指標 另請教TypeLibrary中的節點是否可以移動順利,我有試過直接搬[TEXT]的文字資料,不過會產生錯誤,不知你是否有方法 謝謝!!是的,**为以var的方式传递指针,如“IAppServer **”映射为var Param1:IAppServer。 var方式在COM里与一般的vcl不太一样,不可能是内存指针的传递(一台机器的地址如何映射到另一台,这个你我都要详细看看COM原理)。因此也不会“减少资料传递,提高效率”,你可以试试DCOM下,比较传递ADO的_RecordSet回Client和把资料save到_Stream,再变成OLEVariant传递回Client。 我认为DCOM和Socket功能应该是一样的。 “TypeLibrary中的節點是否可以移動順利”,不明白你的意思。 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
suda
一般會員 發表:17 回覆:63 積分:16 註冊:2002-05-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |