1

私は2つのプロジェクトで解決策を持っています:

  1. C++メインプロジェクト
  2. ac#プロジェクト(ディスプレイシミュレーター)

現在、これら2つのアプリは、ループバックTCPクライアント/サーバー接続を使用してデータを共有していますが、これはあまり最適ではありません(タイミングの問題など)。

c ++プロジェクトからc#データに直接アクセスする方法とその逆の方法があるかどうか疑問に思いましたか?(2つのc#プロジェクトで可能と思われます。)それが不可能な場合、共有メモリでこれを実装するための最良の方法は何ですか?

ありがとう!マイケル

編集:答えてくれてありがとう。2つのプロジェクトは以前は独立したソリューションであり、どちらも実行可能ファイルです。実際には、2つを1つのソリューション/実行可能ファイルにマージしようとしています。詳細:c ++アプリはPC版の組み込みアプリです-c#アプリはlcd/HMIシミュレーターです。

4

4 に答える 4

1

C++プロジェクトをC++/CLIプロジェクトに変換するのが最も簡単な方法かもしれません。ただし、一部のコードはC ++ / CLIではうまく機能しないことに注意してください(マネージ実行可能ファイルでboost :: threadを使用するライブラリの使用で問題が発生しました)。

于 2009-11-18T12:06:03.017 に答える
0

マーシャリング/デマーシャリングとcomのオーバーヘッドなしに、c ++とc#の間でメモリに直接アクセスする方法は2つあります。コードのc++部分をネイティブに保つ必要がある場合、これを実現するために私が知っている唯一の方法は、c++アプリケーションからclrをホストすることです。比較的複雑な事業。Googleの「共通言語ランタイムのホスティング」。次に、c#コードをアセンブリとしてロードし、c#コードを呼び出して、共通の共有メモリスタイルのインターフェイスを提供できます。c#/。netで共有メモリの直接サポートが見つからなかったため、すべての共有メモリサポートを自分で作成する必要があります。

もう1つの方法は、共通言語ランタイムをサポートしてc++コードをコンパイルすることです。これははるかに簡単で、clrベースのデータ型へのアクセス、およびc ++とc#コード間での呼び出しを可能にしながら、c++のすべての能力と栄光を可能にします。VS2008ドキュメントの「CLRを対象とする言語機能」を参照してください。pin_ptrは、このプロセスであなたの親友と味方になります。

于 2009-11-18T10:33:28.820 に答える
0

COM相互運用機能またはPlatformInvokeを使用して、C#のネイティブコードにアクセスできます。

それがあなたが求めているものではない場合は、詳しく説明してください。

于 2009-11-17T22:17:48.187 に答える
0

名前付きパイプ?

名前付きパイプを介したプロセス間通信について は、C#側の.NET3.5機能http://msdn.microsoft.com/en-us/library/system.io.pipes.aspxを確認できます。C ++側からは、同等のものを知っていると思います:)。

于 2009-11-17T22:20:32.720 に答える