ついに,禁断のC++/CLIに手を出してみたり...
いや,悪戦苦闘中(爆
少しずつ,ここにTIPSが上がるはず?
ってことで,第一弾
- アンマネージクラスにマネージクラスのメンバを追加したいのじゃ!
C++:
- class CHogeHoge : public CObject
- {
- private:
- Bitmap^ m_Image;
- }
見たいなの書くと...
- error C3265: マネージ 'm_Image' をアンマネージ 'CHogeHoge' で宣言できません。
と言われて,怒られる(´・ω・`)ショボーン
まぁ,メモリ管理の問題から,いろいろあるっちゃろねぇ
アンマネージとマネージの間には,深くて暗い川があるしのぉ~
でも,使いたいんじゃぁ~~
ってことで,調べていったら...
裏技発見!
C++/CLI - ネイティブクラスメンバのマネージクラス - LangEdge Weblog
さまのページに,記載がありましたです
なんでも,マネージクラスメンバの宣言時に
- gcroot<マネージクラス名^>
を使えばいいとのこと
書き直してみた
C++:
- class CHogeHoge : public CObject
- {
- private:
- gcroot<Bitmap^> m_Image;
- }
これで,コンパイルも通り,使えるようになりましたです
あと,この変数のNULLチェックですが
C++:
- if (m_Image == nullptr)
- {
- //にゃぁ~にゃぁ~にゃぁ~
- }
と書くと
- error C2088: '==' : struct に対して正しくありません。
と,また怒られる
チェックするためには一手間必要で
C++:
- if (static_cast<Bitmap^>(m_Image) == nullptr)
- {
- //にゃぁ~にゃぁ~にゃぁ~
- }
みたいな感じで,キャストしてやる必要がありますです


