【C++/CLI】アンマネージクラスにマネージクラスのメンバを追加したい

ついに,禁断のC++/CLIに手を出してみたり...

いや,悪戦苦闘中(爆

少しずつ,ここにTIPSが上がるはず?


ってことで,第一弾

    アンマネージクラスにマネージクラスのメンバを追加したいのじゃ!




class CHogeHoge : public CObject
{
private:
      Bitmap^  m_Image;
}

見たいなの書くと...

    error C3265: マネージ ‘m_Image’ をアンマネージ ‘CHogeHoge’ で宣言できません。

と言われて,怒られる(´・ω・`)ショボーン

まぁ,メモリ管理の問題から,いろいろあるっちゃろねぇ
アンマネージとマネージの間には,深くて暗い川があるしのぉ~
でも,使いたいんじゃぁ~~ 😈


ってことで,調べていったら...
裏技発見!

C++/CLI – ネイティブクラスメンバのマネージクラス – LangEdge Weblog

さまのページに,記載がありましたです

なんでも,マネージクラスメンバの宣言時に

    gcroot<マネージクラス名^>

を使えばいいとのこと

書き直してみた

class CHogeHoge : public CObject
{
private:
      gcroot<Bitmap^>  m_Image;
}

これで,コンパイルも通り,使えるようになりましたです 😉


あと,この変数のNULLチェックですが
if (m_Image == nullptr)
{
    //にゃぁ~にゃぁ~にゃぁ~
}

と書くと

    error C2088: ‘==’ : struct に対して正しくありません。

と,また怒られる

チェックするためには一手間必要で

if (static_cast<Bitmap^>(m_Image) == nullptr)
{
    //にゃぁ~にゃぁ~にゃぁ~
}

みたいな感じで,キャストしてやる必要がありますです