[ad_1]
C++ クラスがあり、それを C# にインポートしたいと考えています。
class __declspec(dllimport) string { public: string(); string(const char*); string(const std::string&); ~string(); int size() const; int lenth() const; const char* c_str() const; string& operator=(const char* str); string& operator=(const std::string& str); private: char* _data; int _lenth; };
私が試したこと:
C#に変換しようとしましたが、方法が見つかりませんでした DllImport
‘ のクラスと操作のオーバーロード=
‘?
C# コードでこのクラスのオブジェクトが必要です。 これを行う方法はありますか?
解決策 1
これは、尋ねられた他の質問へのフォローアップのように感じます ここ[^]、なぜその質問にコメントしなかったのですか?
私の知る限り、C# と C++ の間でクラスを共有することはできませんが、それはサポートされているオプションではありません。 他の質問で述べたように、使用できます char*
2 つの間で文字列値を渡す必要がある場合。 あなたの元の質問から、それがあなたのインスタンスでなければならない理由が特にわかりません string
クラス?
さもないと、 このStackOverflowの質問[^] 関数をエクスポートして、クラス インスタンスを作成、呼び出し、削除する方法を強調しています。 しかし、相互運用サービスを使用すると、これは不可能になります。
解決策 2
C++ クラスを C# にインポートすることはできません。 この 2 つの言語はまったく異なり、C++ はネイティブ Windows で実行されますが、C# には .NET が必要です。
C# プログラムは、次の方法で C スタイルの関数にアクセスできます。 プラットフォーム呼び出し (P/呼び出し) | Microsoft Docs[^].
解決策 3
C++ DLL と対話できる DLL を作成し、API のプレーン C バージョンをエクスポートする必要があると思います。 その後、その DLL を C# から使用できます。
C++ <-> C <-> C#
解決策 5
クラスのインポートは常に最良のアイデアとは限りませんが、データのインポートはより簡単です。 サポートされていないクラスのメンバーを含むクラスをインポートすることはできません。
私の記事を読む コーリングオールステーション および可能な解決策に関するそのコード。
C++ と C# の間で文字列を転送するときの最善の解決策は、単純な文字配列か、より複雑なものです。 _bstr_t.
解決策 7
const float healthFrac = player->GetHealth() * 0.01f;
interface::surface->DrawSetColor((1.f – healthFrac) * 255,255, * healthFrac,0,255);
[ad_2]
コメント