ACTIVEXの使用方法 – プログラミング – Home

通知
すべてクリア

ACTIVEXの使用方法


コム
 コム
(@コム)
ゲスト
結合: 15年前
投稿: 7
Topic starter  

お世話になっております。

ACTIVEXコントロールには
ダイアログに張り付けるパターンと
CreateDispatchメソッドで生成するパターンの
主に2種類あると思います。

今回、CreateDispatchメソッドで生成するパターンにより、
メンバ変数をアクセスしたのですが、
AfxCallWndProcによりエラーをキャッチしてしまい。

「メンバが見つかりません」と言われました。

どのようにしたら、アクセスできるのでしょうか?

-------------------------------------------------------------------------

コードを以下に示します。

Device dev;
CoInitialize(NULL);//COMを利用するスレッド毎に呼び出さなければならないAPI
BOOL bRet = dev.CreateDispatch(xxxx.yyyy);// bRet はTRUE

dev.get_DeviceIsPresent();<-----------------ここでエラーが発生!!!

-------------------------------------------------------------------------
備考:今回外部から頂いたDLL(ActiveX)を使っています。
VBによるサンプルコードしかなく、僕の知識では参考になりません。。。

どうかご指導の程、宜しくお願いします。


引用解決済
トピックタグ
コム
 コム
(@コム)
ゲスト
結合: 15年前
投稿: 7
Topic starter  

自己レスです。
CoCreateInstanceでオブジェクト生成は出来たんですが、
AfxConnectionAdviseでのシンク間の接続時に
戻り値0になってしまうんです。。。

なかなか難しいですね。。。


返信引用
コム
 コム
(@コム)
ゲスト
結合: 15年前
投稿: 7
Topic starter  

どなたか

AfxConnectionAdviseメソッドが失敗する原因

について、お分かりの方

教えて頂けませんか?


返信引用
コム
 コム
(@コム)
ゲスト
結合: 15年前
投稿: 7
Topic starter  

エラー内容を
GetLastErrorで取得したところ、

122:システム コールに渡されるデータ領域が小さすぎます。

と言われました。

コネクション側での領域生成等、何か関係あるんでしょうか。。。。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 23年前
投稿: 1235
 

>122:システム コールに122:システム コールに渡されるデータ領域が小さすぎます。

をコムさんのパターンにあわせるとこうなります。

 「実行するACTIVEXコントロールに渡されるデータ領域が小さすぎます。」

心当たりないですか?


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 23年前
投稿: 1235
 

あっとこうですね。
コピーミスです。
>122:システム コールに渡されるデータ領域が小さすぎます。


返信引用
コム
 コム
(@コム)
ゲスト
結合: 15年前
投稿: 7
Topic starter  

ITOさん、お返事有難うございます。

>「実行するACTIVEXコントロールに渡されるデータ領域が小さすぎます。」

何がデータ領域と言われるのか考えたところ
2つあると思います。
1)インスタンスしたオブジェクト m_pSrc
2)IDispatchクラスのポインタ m_pUnk

コード抜粋)
_xxxx* m_pSrc;//接続するIDispatchクラス
MFCSink *m_pSink;//CCmdTargetの派生クラス
HRESULT hr=CoCreateInstance(CLSID_xxxx
,NULL,CLSCTX_INPROC_SERVER,IID__xxxx ,(void**) &m_pSrc);
LPUNKNOWN m_pUnk=m_pSink->GetIDispatch(FALSE);
int nRet = AfxConnectionAdvise(m_pSrc,IID__xxxx
,m_pUnk,FALSE,&m_dwCookie);

実際にはAfxConnectionAdviseで0が返されます。
しかし、m_pSrcとm_pUnkともにデバッグ上
正常に取得しているとおもうのでこれ以外の原因があるのではと、
調査中です。。。。


返信引用
コム
 コム
(@コム)
ゲスト
結合: 15年前
投稿: 7
Topic starter  

あと、もう1点気になったのですが、
こんな文書がありました。

IConnectionPointContainer::FindConnectionPoint() で失敗すると
AfxConnectionAdviseで0が返されます。

http://support.microsoft.com/kb/190148/ja

これは関係あるのでしょうか。。。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 23年前
投稿: 1235
 

>これは関係あるのでしょうか。。。
VC6.0ですか、それよりも上のバージョンの場合改善されている可能性もありますね。


返信引用
ダイ
 ダイ
(@ダイ)
ゲスト
結合: 23年前
投稿: 16
 

いえ、2005です。

つまりVB6.0のACTIVEXに対して、
6.0以上のバージョンでの
操作や接続にかかわる仕様が
変更されている可能性があるということでしょうか?


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 23年前
投稿: 1235
 

> 操作や接続にかかわる仕様が
> 変更されている可能性があるということでしょうか?

http://support.microsoft.com/kb/190148/ja
 ここに書いてある解決方法のことをしなくても、動作する可能性が
あるのではないかと思いました。
つまり、問題が解決している可能性があると思いました。


返信引用
コム
 コム
(@コム)
ゲスト
結合: 15年前
投稿: 7
Topic starter  

残念ながら6.0の環境がないため、
確認できないのですが、バージョンアップによる
DLLの仕様変更について細かな資料を探してみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました