【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)
{
    //にゃぁ~にゃぁ~にゃぁ~
}
みたいな感じで,キャストしてやる必要がありますです

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください