IDispatchについて

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: IDispatchについて

by ゲスト » 2007年5月29日(火) 10:53

SysFreeString
SysAllocStringByteLen
を使用してメモリを確保した所、上手く行きました

by ゲスト » 2007年5月27日(日) 21:01

> > CLSIDはちゃっと取得出来ています
> そうですか,自分のところではAPI関数のCLSIDFromProgIDを使ってダメだったもので。

_CLSIDFromProgIDは自作関数でして、変換などの処理を入れてます
大変すみません

> では,IDispatch.GetIDsOfNamesの2番目の引数が気になります。これは文字列へのポインタの配列を渡すところです。どう宣言しているかによりますが,VarPtr(wszName)とするとどうでしょうか?

VarPtrを使用しましたが結果は同じでした、
宣言はVirtual Function GetIDsOfNames(ByRef riid As GUID,rgszNames As *Byte,cNames As DWord,lcid As DWord,ByRef rgDispId As Long) As LRESULT
ちなみに、エラーメッセージはDISP_E_UNKNOWNNAMEです

> また,ABからブラウザを操作したければIDispatchだけでなく,IWebBrowser2も使えます。DISPIDを取得して呼び出すという手順が不要な分,場合によってはこちらのほうが単純にできるかもしれません。

そちらの方やってみたいと思います
お手数お掛けして申し訳ありませんでした

by イグトランス » 2007年5月27日(日) 18:05

> CLSIDはちゃっと取得出来ています
そうですか,自分のところではAPI関数のCLSIDFromProgIDを使ってダメだったもので。

では,IDispatch.GetIDsOfNamesの2番目の引数が気になります。これは文字列へのポインタの配列を渡すところです。どう宣言しているかによりますが,VarPtr(wszName)とするとどうでしょうか?

また,ABからブラウザを操作したければIDispatchだけでなく,IWebBrowser2も使えます。DISPIDを取得して呼び出すという手順が不要な分,場合によってはこちらのほうが単純にできるかもしれません。

by ゲスト » 2007年5月27日(日) 15:16

> CLSIDFromProgIdは,IDispatch.GetIDsOfNames同様OLECHAR文字列を要求します。そのためMultiByteToWideCharで変換してやらないといけません。ただ,それは面倒なので,CLSIDを宣言することをお勧めします。

CLSIDはちゃっと取得出来ています
問題はIDispatch.GetIDsOfNamesの方で
MultiByteToWideCharで変換しているのですが、失敗するので
何故なのかなと思いまして…

by イグトランス » 2007年5月27日(日) 10:27

CLSIDFromProgIdは,IDispatch.GetIDsOfNames同様OLECHAR文字列を要求します。そのためMultiByteToWideCharで変換してやらないといけません。ただ,それは面倒なので,CLSIDを宣言することをお勧めします。

コード: 全て選択

TypeDef CLSID = GUID
Dim CLSID_InternetExplorer = [&H0002DF01, &h0000, &h0000, [&hC0, &h00, &h00, &h00, &h00, &h00, &h00, &h46]] As CLSID

IDispatchについて

by ゲスト » 2007年5月27日(日) 00:41

COMを使うため
メゾットを呼び出そうとしているのですが、ディスパッチIDが取得できず・・・

ページトップ