はじめまして。「とも」と申します。
早速ですが質問させていただきます。
現在開発中のOCXは1つのプロパティを公開しています。
外部プロパティ名は AnaData
AnaDataは long 型です。
プロパティ取得/設定メソッドを使用し、
そのメソッド名はそれぞれ GetAnaData, SetAnaDataとしています。
つまり、
long GetAnaData();
void SetAnaData(long nNewValue);
となります。
このOCXをVCで作成した別のEXEに組み込みます。
EXEからOCXのプロパティを参照/設定する場合、
XXX.GetAnaData(); //XXXはOCX変数
XXX.SetAnaData(100);
のような形になります。
これを
i = XXX.AnaData; //取得の場合(iはlong型)
XXX.AnaData = 100; //設定の場合
のような形にすることは可能でしょうか?
開発環境
Visual C++ 6.0 SP6
Windows XP Pro SP2
以上、宜しく御願い致します。
__declspec(property(get=GetAnaData, put=SetAnaData}) ) AnaData;
てな感じでかければできるのですけど、、、
http://msdn.microsoft.com/library/ja/default.asp?
url=/library/ja/vclang/html/_langref_property.asp
お世話になります。ともです。
Blue様 早速のご回答有難う御座います。
大変参考になりました。
助言を元に試してみました。
コンテナ側(EXE側)で対応するには、
OCXの ラップ クラスのpublicに
__declspec(property(get=GetAnaData, put=SetAnaData}) ) long AnaData;
のようなコードを追加したところ、所望の結果が得られました。
ただ、
// Microsoft Visual C++ によって自動生成された IDispatch ラップ クラス
// メモ: このファイルの内容を編集しないでください。 このクラスが再度
// Microsoft Visual C++ で生成された場合、変更を上書きします。
のような注意書きがあり、果たして追加方法はこれで間違いがないのか不安なところで
す。
上記はコンテナ側で対応しましたが、
OCX側で対応することは可能でしょうか?
無理っす。
OCXにはプロパティ機構がありますが、C++にはないので、VBから利用した場合に
XXX.AnaData
でアクセスできるようにすることはできますが、C++からだと、
XXX.get_AnaData()
XXX.put_AnaData( 100 );
みたいに、今よりカッコ悪くなると思います。
シャノン様
お世話になります。ともです。
回答ありがとうございます。
XXX.AnaData = 100
のような形式はコンテナ側の機能であり、
OCX側で対応することではないようですね。
チェックし忘れました。
アドバイスしてくださったBlue様, シャノン様ありがとうございました。