自作ActiveXのメンバ変数にアクセスするには

[戻る]
タフガイ 2007/12/27(木) 14:26:42
VC++6.0でActiveXを作成、同じくEXEを作成しActiveXを呼び出しています。

VCでのActiveXに関するHP等が非常に少なく、四苦八苦しながら作成しているのですが
EXEからActiveXのメンバ変数にアクセスするにはどうしたらよいのでしょうか?

クラスウィザードのオートメーションからメソッドを追加してメンバ変数に
値をセットしたり値を取得する事は出来たのですが
仕様としては直接やりとりするActiveXを作成しなければなりません。

int i = ActiveX.aaa

のような感じでプロパティ値を取ってくるような感じにしたいのですが
オートメーションからプロパティの追加をしてもEXE側から参照ができません。

ご存知の方がいらしたらよろしくお願いします。

Kerry 2007/12/27(木) 14:50:47
> オートメーションからプロパティの追加をしてもEXE側から参照ができません。

この部分をもう少し詳しく。
どのように追加したのか、"参照できない"とはどういうことか。
できればコードも載せた方が良いでしょう。

タフガイ 2007/12/27(木) 15:31:34
ありがとうございます。

実際のコードはうまく動かないので、現状は消しているのですが

オートメーションのプロパティの追加からインプリメンテーションをメンバ変数を選択し
外部名:aaa
タイプ:short
変数名:m_aaa

となっています。

これを呼出EXEから
ActiveX.aaa
という形で呼び出し・アクセスしたいのですが、うまくいきません。

このような説明で理解して頂けるでしょうか。

シャノン 2007/12/27(木) 15:47:57
VC++ 6.0が手元に無いので推測ですが、ActiveX.get_aaa(); ではどうでしょう?

タフガイ 2007/12/27(木) 16:18:48
シャノンさん、ありがとうございます。

おっしゃる方法でやってみると
ActiveX.GetAaa();
のような形でアクセスできました。
なぜかAaaの様に大文字に変わっていました。

VC6.0からでは直接
ActiveX.aaa
のような形ではアクセスできないのでしょうか?

実際にActiveXを使用するEXEの開発環境はC#なのですが、そちらでは可能なのでしょうか?

PATIO 2007/12/28(金) 10:20:12
VCでやる場合は、VBでやるようなアクセスはできないと思います。
プログラム上から呼ぶ場合は、ActiveXを扱う為のラッパークラスが
自動的に作成されてそれを通して行なっていると思うのですが、
そのラッパークラスにそのようなメンバー変数は定義されていないと思います。

これはそういうものだと考えた方が良いと思います。
C#に関してはやった事がないので良く分からないです。
VBと同じような扱いが出来るなら出来てもおかしくないとは思いますけれど。
ちなみにC#の質問は掲示板が別に用意されているのでそちらでした方がよろしいかと。

タフガイ 2007/12/28(金) 11:38:38
[[解決]]
ラッパークラスというのは初めて知りました。
後ほど調べておきます。

やはりVC++では無理っぽいですね。
考えてみれば、通常のコントロールにしても基本的には関数でアクセスしていますし。

関数を使ってでもプロパティにアクセスできるようになっただけでも、大分テストが楽に
なりました。

後ほどC#掲示板で質問してみようと思います。

ありがとうございました。

wclrp ( 'o') 2007/12/29(土) 07:33:14
実際はC#で使うということですから余談ですけど。

うろ覚えですが
VCで
#importで
IDLを元にdeclspec propertyを付けたCOM(ActiveX)オートメーションの
ラッパークラスを作成していれば

ソースに
obj.aaa = obj.bbb;
と書くと
obj.SetAaa(obj.GetBbb());
としてコンパイルできるようになるんだけど

ActiveXオートメーションを作るほうでの
『プロパティの追加』の仕組みが違うのかな?

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