討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
COM / DCOM 的參數傳遞問題請教.
更改我的閱讀文章字型大小
作者 : (Silent Lamb)
[ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2000/11/4 上午 09:14:07
Dear Friends :
    一般我們在傳遞物件時, 都是傳遞物件的指標. 如果我有一個 COM 的元件,
內部有一個 test 的物件屬性, 那我該如何將應用程式內的物件指定給 COM 元件?
而這個 test 的物件是自訂的. 小弟曾是過將指標以無號整數傳入 COM 元件內,
在將該數轉為指標. 但在執行時就會掛掉.
作者 : (Jet)
[ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2000/11/4 下午 08:41:38
>Dear Friends :
> 一般我們在傳遞物件時, 都是傳遞物件的指標. 如果我有一個 COM 的元件,
>內部有一個 test 的物件屬性, 那我該如何將應用程式內的物件指定給 COM 元件?
>而這個 test 的物件是自訂的. 小弟曾是過將指標以無號整數傳入 COM 元件內,
>在將該數轉為指標. 但在執行時就會掛掉.


你是用VB還是VC++ ?
作者 : (david)
[ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2000/11/9 下午 12:29:12
>>Dear Friends :
>> 一般我們在傳遞物件時, 都是傳遞物件的指標. 如果我有一個 COM 的元件,
>>內部有一個 test 的物件屬性, 那我該如何將應用程式內的物件指定給 COM 元件?
>>而這個 test 的物件是自訂的. 小弟曾是過將指標以無號整數傳入 COM 元件內,
>>在將該數轉為指標. 但在執行時就會掛掉.
>>


大哥

  沒人在COM元件的介面傳遞object pointer, 除非你功力高強
對marshal非常熟悉, 否則大多是傳遞IUnknown, IDispatch,
VARIANT等標準手法, 然後再來自行作技巧性轉換

     柯仁傑
作者 : (yfcii)
[ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2000/11/22 上午 09:08:32
>>>Dear Friends :
>>> 一般我們在傳遞物件時, 都是傳遞物件的指標. 如果我有一個 COM 的元件,
>>>內部有一個 test 的物件屬性, 那我該如何將應用程式內的物件指定給 COM 元件?
>>>而這個 test 的物件是自訂的. 小弟曾是過將指標以無號整數傳入 COM 元件內,
>>>在將該數轉為指標. 但在執行時就會掛掉.
>>>
>>

>大哥

> 沒人在COM元件的介面傳遞object pointer, 除非你功力高強
>對marshal非常熟悉, 否則大多是傳遞IUnknown, IDispatch,
>VARIANT等標準手法, 然後再來自行作技巧性轉換

> 柯仁傑



如果是 in prococess server(ex: ActiveX controls, dll based component), 那麼可以直接 pass address.
for example:

// client
CTest Test;
IPassData->PassData((long) &Test);


// in compoent
HRESULT CoComponent::PassData(long pObj)
{
    CTest* pTest = (CTest*) pObj;
}


如果是 out-of-process server(ex: exe server), 那麼要嗎自己寫code把
要pass的class中的每一個data member 給推進 proxy dll, 然後再自己寫code把data member 從 proxy dll 中取出來(這個動作叫做 marshalling).
做這個動作其實很簡單, 可是你一但這樣子做以後, 這個component 就不再是
language independent 了.
最好的方式是把你的class 定義成一個 interface, 然後直接pass這個interface給component, 這樣子 compiler 就可以幫你做 marshalling 了.








 
作者 : (david)
[ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2000/11/22 下午 04:11:25
>>>>Dear Friends :
>>>> 一般我們在傳遞物件時, 都是傳遞物件的指標. 如果我有一個 COM 的元件,
>>>>內部有一個 test 的物件屬性, 那我該如何將應用程式內的物件指定給 COM 元件?
>>>>而這個 test 的物件是自訂的. 小弟曾是過將指標以無號整數傳入 COM 元件內,
>>>>在將該數轉為指標. 但在執行時就會掛掉.
>>>>
>>>
>>
>>大哥
>>
>> 沒人在COM元件的介面傳遞object pointer, 除非你功力高強
>>對marshal非常熟悉, 否則大多是傳遞IUnknown, IDispatch,
>>VARIANT等標準手法, 然後再來自行作技巧性轉換
>>
>> 柯仁傑
>>


>如果是 in prococess server(ex: ActiveX controls, dll based component), 那麼可以直接 pass address.
>for example:

>// client
>CTest Test;
>IPassData->PassData((long) &Test);


>// in compoent
>HRESULT CoComponent::PassData(long pObj)
>{
> CTest* pTest = (CTest*) pObj;
>}


>如果是 out-of-process server(ex: exe server), 那麼要嗎自己寫code把
>要pass的class中的每一個data member 給推進 proxy dll, 然後再自己寫code把data member 從 proxy dll 中取出來(這個動作叫做 marshalling).
>做這個動作其實很簡單, 可是你一但這樣子做以後, 這個component 就不再是
>language independent 了.
>最好的方式是把你的class 定義成一個 interface, 然後直接pass這個interface給component, 這樣子 compiler 就可以幫你做 marshalling 了.











作者 : (david)
[ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2000/11/22 下午 04:17:09

>如果是 in prococess server(ex: ActiveX controls, dll based component), 那麼可以直接 pass address.
>for example:

>// client
>CTest Test;
>IPassData->PassData((long) &Test);


>// in compoent
>HRESULT CoComponent::PassData(long pObj)
>{
> CTest* pTest = (CTest*) pObj;
>}


  good solution, 但是在MTA, multi-thread的狀況下仍可以
work嗎??


>如果是 out-of-process server(ex: exe server), 那麼要嗎自己寫code把
>要pass的class中的每一個data member 給推進 proxy dll, 然後再自己寫code把data member 從 proxy dll 中取出來(這個動作叫做 marshalling).
>做這個動作其實很簡單, 可是你一但這樣子做以後, 這個component 就不再是
>language independent 了.

我想這是關鍵, 你當然可以用盡各種高明招數來傳遞object pointer
但是你之所有要使用COM/DCOM,我想最重要的是lang independent
希望COM/DCOM能幫你take care這些問題, 如果你要反其道而行,
那就沒必要用COM/DCOM. 當然如果你想挑戰自己解決問題的技術,
我是不反對啦 : )

     柯仁傑

>最好的方式是把你的class 定義成一個 interface, 然後直接pass這個interface給component, 這樣子 compiler 就可以幫你做 marshalling 了.











 板主 : 徵求中
 > COM/DCOM - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - COM/DCOM - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
COM/DCOM
1 估得 490 
2 nick 120 
3 PLAYER 110 
4 天雲 100 
5 Raynor 80 
6 青衫 60 
7 60 
8 Peter.huang 50 
9 酷小毅 50 
10 Giant 50 
COM/DCOM
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.015625