エクセルを受け取る時の引数の型について


kiy  2009-09-18 03:10:07  No: 70948

お世話になります
VC++を使い始めて2週間の初心者です

HTML内に
<OBJECT ID="ExcelTest" CLASSID="CLSID:xxxxx">
</OBJECT>
として埋め込んだVC++で作成したOCXの関数に
同一ブラウザ内の別フレームに表示させているエクセルを
引数として渡し、そのエクセルを読み込んで
設定されているマクロを実行する
という処理(例:GetExcel)を作ろうとしています。

これを実現するためには、上記関数を呼び出す際に
引数として受け取る変数の型にはいったい何を
指定すればよいのでしょうか。

現在OCXの関数はJavascriptより以下のように呼び出しています
document.ocx.GetExcel(document.frame.エクセルを表示しているDIVタグのID)
としています。

引数なしのGetExcel関数を作成して
MessageBox("xxx")と記述して
GetExcel関数が呼ばれていることまでは確認しています

環境
VC++6.0
IE6.0SP2

以上です
よろしくお願いします


subaru  2009-09-18 20:05:54  No: 70949

エクセルがきちんと取れているならとりあえずIDispatch*でいいと思うけど
DIVタグのIDを渡しているならただの文字列になっちゃいませんか?


kiy  2009-09-19 01:31:12  No: 70950

回答ありがとうございます

>DIVタグのIDを渡しているならただの文字列になっちゃいませんか?

につきまして、
document.ocx.GetExcel(document.frame.エクセルを表示しているDIVタグのID)
ではなく
document.ocx.GetExcel(document.frame.エクセルを表示しているOBJECTタグのID)
でした。

また、ご指摘どおりVC++側でGetExcel(IDispatch* pDisp)と修正し、
JavaScriptより関数を呼んでみたところ引数の型が違う的なメッセージにより動作していません。

何か根本的に間違っている気もしますがよくわからない状態です。


subaru  2009-09-19 02:43:11  No: 70951

OBJECTタグの部分は実際には mshtml.h に定義されている
IHTMLObjectElement のオブジェクトだと思うので
そのobjectプロパティがエクセルなんだと思います。
どっちにしてもエラーになるならocx側の定義が間違っている可能性があります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加