討論區快速選單
知識庫快速選單
傑米的攝影旅遊筆記 政府補助!學嵌入式+物聯網 程式設計俱樂部Facebook粉絲團
[ 回上頁 ] [ 討論區發言規則 ]
關於Activex兩個問題!
更改我的閱讀文章字型大小
作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 01:18:24
第一個問題就是:
用VB寫的OCX我做成安裝檔到另一台電腦執行,無法顯示!但用VC寫的DLL元件可以顯示
第二個問題是:
我用VC寫一個ATL ACtivex元件,裡面又調用另一個OCX元件,也就是元件裡嵌入另一個元件,我要如何去控制這個元件(這部份在網路上有找到解).但是OCX元件的events確抓不到 !
我試過用AtlAdviseSinkMap也失敗!
希望各位高手指導一下!!!
作者 : kcin(nick)
[ 貼文 153 | 人氣 2 | 評價 900 | 評價/貼文 5.88 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人seantw註記此篇回應為最佳解答 2005/2/15 下午 02:45:28
什麼訊息都沒留下
那只有猜吧

第一個問題我猜是因為還缺少dll或LIB 應該可以用depend.exe查看
是否還缺元件

第二個問題應該是ocx控制項的hwnd是NULL
解決方式 =>http://support.microsoft.com/default.aspx?scid=kb;en-us;153582

作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 04:44:40

>什麼訊息都沒留下
>那只有猜吧
>
>第一個問題我猜是因為還缺少dll或LIB 應該可以用depend.exe查看
>是否還缺元件
>
是在Client端執行嗎??
我好像有用到需要註冊的OCX元件....
等等再去試試 !!

>第二個問題應該是ocx控制項的hwnd是NULL
>解決方式 =>http://support.microsoft.com/default.aspx?scid=kb;en-us;153582
>
>
作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 05:35:56
>第二個問題應該是ocx控制項的hwnd是NULL
>解決方式 =>http://support.microsoft.com/default.aspx?scid=kb;en-us;153582
>
這個在ATL的DLL ACTIVEX元件裡好像不適用..
因為我找不到 OnSetClientSite() ..
有針對ATL的部份解法嗎?
我在MFC Activex裡是有找到的!
作者 : kcin(nick)
[ 貼文 153 | 人氣 2 | 評價 900 | 評價/貼文 5.88 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 10:20:08
OnSetClientSite()在CLassView 中按右鍵的Add Virtual Function
作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/16 上午 08:32:59
Nick先謝謝你的熱心幫助...現在同樣的問題又卡住...
Class CTestControl::COleControl 是繼承 ColeControl
在我的ATL CLASS裡並沒有繼承COleControl 以下是我的Class繼承..
-----------------------------------------------------------------
class ATL_NO_VTABLE CPublicRoom :
public CComObjectRootEx<CComSingleThreadModel>,
public IPublicRoom,
public IPersistStreamInitImpl<CPublicRoom>,
public IOleControlImpl<CPublicRoom>,
public IOleObjectImpl<CPublicRoom>,
public IOleInPlaceActiveObjectImpl<CPublicRoom>,
public IViewObjectExImpl<CPublicRoom>,
public IOleInPlaceObjectWindowlessImpl<CPublicRoom>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CPublicRoom>,
public CProxy_IPublicRoomEvents<CPublicRoom>,
public IPersistStorageImpl<CPublicRoom>,
public ISpecifyPropertyPagesImpl<CPublicRoom>,
public IQuickActivateImpl<CPublicRoom>,
public IDataObjectImpl<CPublicRoom>,
public IProvideClassInfo2Impl<&CLSID_PublicRoom, &__uuidof(_IPublicRoomEvents), &LIBID_ChatPublicLib>,
public CComCoClass<CPublicRoom, &CLSID_PublicRoom>,
public CComCompositeControl<CPublicRoom>,
public IDispEventImpl<IDC_IMEETNOWCLIENT21,CPublicRoom>
--------------------------------------------------------------------------
依您的提示我加入了 void CPublicRoom::OnSetClientSite(void)
裡面有一個參數叫 m_pClientSite
該參數定義在 afxctl.h中..
但我include進這個檔案時仍然無法使用..
m_pClientSite會編譯錯誤..找不到 !
請您再幫幫忙!謝謝!
作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/16 上午 08:38:51

>
>>什麼訊息都沒留下
>>那只有猜吧
>>
>>第一個問題我猜是因為還缺少dll或LIB 應該可以用depend.exe查看
>>是否還缺元件
>>
>是在Client端執行嗎??
>我好像有用到需要註冊的OCX元件....
>等等再去試試 !!
第一個問題已經找到了..
答案在..http://support.microsoft.com/default.aspx?scid=kb;zh-tw;169438
是因為我的元件是需要註冊的!!!
作者 : kcin(nick)
[ 貼文 153 | 人氣 2 | 評價 900 | 評價/貼文 5.88 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/16 上午 09:26:43
void COCXCONTROL::OnSetClientSite()
{
// TODO: Add your specialized code here and/or call the base class

   VERIFY (CreateControlWindow (::GetDesktopWindow(), CRect(0,0,0,0),
     CRect(0,0,0,0)));
COleControl::OnSetClientSite();
}

我的ocx程式在使用的時候有用到PostMessage,在vb6 不能使用的狀況下
加上這個CreateControlWindow就可以正常使用

你目前的狀況可能不是我猜測的現象
建議trace程式看看到底是怎麼回事
作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/17 上午 07:41:15
想請教一下這句話的意思..
//Make sure the Event Handlers have __stdcall calling convention
這是在BEGIN_SINK_MAP(CClientDlg)與END_SINK_MAP()中的提示
是否表示我嵌入的元件要有這種支援,還是我現在正要寫的元件需有這種支援!
關於 __stdcall convention我只有在屬性裡找得到???
那是表示編譯時要採用__stdcall的方式嗎??
謝謝!!

作者 : good(估得)
[ 貼文 146 | 人氣 225 | 評價 480 | 評價/貼文 3.29 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人seantw註記此篇回應為最佳解答 2005/2/20 下午 10:22:39

原來,你是要handle COM object 所產生的event,那你可以參考這裡

http://msdn.microsoft.com/library/cht/default.asp?url=/library/CHT/vccore/html/_atl_connection_points.asp
作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/20 下午 11:15:45

>
>原來,你是要handle COM object 所產生的event,那你可以參考這裡
>
>http://msdn.microsoft.com/library/cht/default.asp?url=/library/CHT/vccore/html/_atl_connection_points.asp


先謝謝你的指導..
詳細情況是這樣!!
我可以由 A元件去主動操作 B元件的 Functioin ..
但是B元件 Events所產生的事件A元件無法接收..
實況是..我用A元件 呼叫 B元件 ----> 網路連線到Server
Server回應連線成功訊息給B元件 ,但是A元件無法知道己經連線

我用A元件去包B元件..
A元件是我寫的Activex.
B元件是別人寫的ocx
我要在A元件裡使用B元件..
作者 : kcin(nick)
[ 貼文 153 | 人氣 2 | 評價 900 | 評價/貼文 5.88 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/21 上午 08:37:06

我是寫了一個OCX使用AsyncSocket
AsyncSocket的event都會產生
只是有問題的時候都是OCX的Handle是null
所以PostMessage無效

請確定B OCX的連線是否以Event的模式方式進行
如果是肯定的 再加上Server可以確定連線
代表Socket的event可以動作
再來就是Socket的Event是否有傳遞到BCTL

A元件與B OCX又是如何連繫

先釐清這些關係

作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/21 下午 01:52:31
Thanks Nick:


>請確定B OCX的連線是否以Event的模式方式進行
>如果是肯定的 再加上Server可以確定連線
>代表Socket的event可以動作
>再來就是Socket的Event是否有傳遞到BCTL

我確認連線是成功的!也就是由A主動去控制B是成功的..
我的Server會有回應連線成功!!並收到訊息!
我之前用VB寫時..不管是由A主動控制或是B的event callback都可接收!!
但用VC去寫時,只能由A主動控制,但是B的event callback就收不到了!!
作者 : kcin(nick)
[ 貼文 153 | 人氣 2 | 評價 900 | 評價/貼文 5.88 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人seantw註記此篇回應為很有道理 2005/2/21 下午 02:38:55
vb與VC的工作模式不同
在VC可用不代表VB也可用
反之亦然
關鍵都在OCX的Handle
如果是個null那就無法使用

我也只有這些辦法了
作者 : good(估得)
[ 貼文 146 | 人氣 225 | 評價 480 | 評價/貼文 3.29 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人seantw註記此篇回應為最佳解答 2005/2/22 下午 04:55:26

工程師最常問的一句話,"有沒有sample code?"

有,參考一下codeproject裡面的sample code,應該能解決你的問題!

good luck

http://www.codeproject.com/com/TEventHandler.asp
作者 : seantw(seantw) 人氣指數超過50000點
[ 貼文 171 | 人氣 51546 | 評價 380 | 評價/貼文 2.22 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/3/3 下午 01:19:11

>
>工程師最常問的一句話,'有沒有sample code?'
>
>有,參考一下codeproject裡面的sample code,應該能解決你的問題!
>
>good luck
>
>http://www.codeproject.com/com/TEventHandler.asp

謝謝你!!!
這篇文章讓我解決現有的問題!
感謝兩位的協助!!
 板主 : 徵求中
 > 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.0625