ActiveXコントロールからポインタのアドレスを取得

[戻る]
チャイ 2009/11/16(月) 12:47:11
MFC ActiveXコントロールでイメージ表示用のコントロールを作成、
表示中のイメージデータへのポインタを取得するメソッドを追加しようと
思っていたのですが、メソッドの追加ウィザードからうまく追加できず
困っています。

具体的には、メソッドの引数にダブルポインタ(BYTE**)を設定するか、
戻り値にポインタ(BYTE*)を設定するかしたいのですが、
ウィザード上の「戻り値の型」や「パラメータの型」のリストに候補が
ないのです。

方法に問題があるのか、実現不可なのか回答を宜しくお願いします。

aetos 2009/11/16(月) 13:50:21
直接入力しちゃえばいいんじゃないでしょうか。

チャイ 2009/11/16(月) 14:00:12
aetosさん、返信ありがとうございます。

関数の戻り値を(BYTE*)として直接入力を試みたら
メソッドは追加されたのですが、ビルドすると
「error C2065: 'VT_PUI1' : 定義されていない識別子です。」
というエラーが出力されてしまいます。

パラメータにダブルポインタを指定しようとすると、
「パラメータの型は、一覧からのバリアント互換型でなければなりません。」
となって入力を受け付けてくれないです。

どちらもウィザード上で設定した場合です。

チャイ 2009/11/16(月) 17:30:45
[[解決]]
自己解決しました。

目的のアドレスは、戻り値にULONGLONGを指定することで
変数としてですが取得出来ました。

VC++しか知らないためにActiveXのインターフェイスに
ダブルポインタも使えるものと思ってたのが間違いだった
と思います。
そうすると、ActiveXコントロールが保持している変数やメモリ
等のアドレスを得ること自体、考えとして間違っているので
しょうか?
同じメモリ空間にマップされている以上、取得することは問題
ないと思うのですが、、、

とりあえず解決したのでチェックを入れました。

wclrp ( 'o') 2009/11/18(水) 22:59:40
ActiveX(COM)は昔ちょっとやっただけなので忘れたな。
ActiveXはVB,VBScript,JScriptなどでも使うものなので
バリアント型を使うべきだな。

まあ、自分用でどうでもいいっていうなら、
無理やり使っても俺にはどうでもいいことなので
どうぞポインタをULONGLONGで返しちゃいなさい。
C/C++プログラマから見ればポインタじゃないと
* 内部データじゃなくて毎回クローンコピーの受け渡し
* バリアント型はいろいろ面倒でプログラム書くのが苦痛
* 処理が遅い
やってられないよね。

古いスレッドには追加発言できません。