• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++/C#間での構造体の引き渡し方法に関して)

C++/C#間での構造体の引き渡し方法に関するコンパイルエラーの原因

このQ&Aのポイント
  • C++とC#で構造体を定義して引き渡ししようとした際に、「Msg*から_Msg*に変換できません」というコンパイルエラーが発生してしまう。構造体の定義は同じなので、原因は何か。
  • C++で定義した構造体をC#から呼び出そうとしているが、「Msg*から_Msg*に変換できません」というコンパイルエラーが出る。
  • C++とC#で同じ構造体を定義して引き渡ししようとしたが、「Msg*から_Msg*に変換できません」というコンパイルエラーが発生してしまう。原因は何か。

質問者が選んだベストアンサー

  • ベストアンサー
  • sygh
  • ベストアンサー率76% (42/55)
回答No.2

// C++/CLI側の例。 namespace CppCliString { // マネージ構造体(値クラス)。 public value class MessagePack { public: UInt32 Code; UInt32 SessionId; }; public ref class Class1 { public: static void PrintAndClear(MessagePack% msg) { printf(__FUNCTION__ "(): Code = 0x%08X, SessionID = %u\n", msg.Code, msg.SessionId); msg.Code = 0xFFFFFFFF; msg.SessionId = 0; } }; } // C#側の例。 { CppCliString.MessagePack msg = new CppCliString.MessagePack(); msg.Code = 10; msg.SessionId = 7; Console.WriteLine("Code = 0x{0}, SessionID = {1}", msg.Code.ToString("X8"), msg.SessionId); CppCliString.Class1.PrintAndClear(ref msg); Console.WriteLine("Code = 0x{0}, SessionID = {1}", msg.Code.ToString("X8"), msg.SessionId); } C#側に合わせたデータ型定義をC++/CLI側で行なうのが基本です。 C#側にポインタ型のインターフェイスを見せるようなことは、何がなんでも避けるべきです。 というか質問を見る限り、明らかにネイティブC++とC++/CLIを混同している上に、C#でポインタを使うことがいかに非生産的な行為であるかを認識されていないようなので、C#とネイティブC++を一通り学び終えた後で、下記の書籍を熟読してからC++/CLIに手を付けることをお勧めします。 http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5C-CLI-%E6%A5%B5%E3%82%81%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%A8%E5%AE%9F%E7%94%A8%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E4%B8%AD-%E5%8D%9A%E4%BF%8A/dp/4797336277

kokukuma
質問者

お礼

丁寧なご回答ありがとうございます。 おかげさまで、やりたいことを実行できました。 ご指摘通り、もうすこしC++/CLIについて勉強したいと思います。 ありがとうございました。

その他の回答 (1)

回答No.1

C++のstructとC#のstructはまったくの別物てことをふまえての質問でしょうか?

関連するQ&A