プロが教える店舗&オフィスのセキュリティ対策術

イベント駆動型のライブラリを使用しているプログラムのC++/CLIへの移行で困っています。

イベントの基底クラスAがC++の構文で書かれているため、派生クラスBはclassで宣言するようにコンパイラからエラーが帰りました。

ですので、classと宣言すると今度はアンマネージクラスの中でマネージコードは使用不可能といわれました。

どうにかこの現象を回避する方法はありませんか?

class A : ライブラリで宣言されているイベントハンドラ(変更不可能)

ref class B : A{}
と宣言するとref classは使えないとエラー

class B : A{}
と宣言するとマネージコードが使用できないとエラー

A 回答 (2件)

どうしても派生したいなら、



class B : public A

とするしかありませんね。

> と宣言するとマネージコードが使用できないとエラー

具体的にはマネージコードをどのように使用しているのでしょうか?
単にハンドルを保持するだけでよいのであれば、gcrootで逃げるというのも一つの手です。

この回答への補足

>具体的にはマネージコードをどのように使用しているのでしょうか?
ハンドラとしてのクラスなので、処理の対象となるC++/CLIで書かれたクラスへのハンドルを保有し、そのメソッドを実行させたいのです。

>gcrootで逃げるというのも一つの手です。
gcrootはC++/CLIではなく、Managed C++の機能みたいですね。
Managed C++のヘッダを #include に追加したところnamespaceにもエラーが発生しました。
Managed C++は覚えていない為、エラーが発生しても理由がわからず、あまりManaged C++を利用したくはありません。

C++で書かれたハンドラとして派生クラスを渡す必要のあるライブラリを使う場合、Win32APIで記述しC++/CLIはただのラッパーとして使う方が良いのでしょうか?

補足日時:2006/08/17 01:47
    • good
    • 0

わざわざ派生クラスにする方法は何でしょう?


別に理由がなければコンポジションでも良いと思いますよ。

C++/CLIの知識があまりない人が書いてますので、あまりあてにしないでくださいね。

この回答への補足

仕様でそのようになっているからです。
ライブラリに渡すハンドラとして、空文のメソッドが定義されたclass Aが定義されています。
それを継承してライブラリに渡す仕様です。
よって、必ずclass Aを継承する必要があり、困っているのです。

補足日時:2006/08/16 15:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!