0

VC++ コードを持っていますが、それを C# に変換したいです。別のソフトウェアを使用して試しましたが、VC++ の機能の一部が C# に変換されません。どうすればよいですか? または c# で VC++ コードを直接使用する方法はありますか?

たとえば、これは VC++ メソッドです。C# に変換したい

    void init_gf (int poly)
  {

int m,b,p,v;

   // Return storage from previous setup



 if (log)

{

      free (log);

      free (alog);

      free (rspoly);

      rspoly = NULL;
   }

   // Find the top bit, and hence the symbol size

   for (b = 1, m = 0; b <= poly; b <<= 1)

      m++;

   b >>= 1;

   m--;

   gfpoly = poly;

   symsize = m;


   // Calculate the log/alog tables

   logmod = (1 << m) - 1;

   log = (int *) malloc (sizeof (int) * (logmod + 1));

   alog = (int *) malloc (sizeof (int) * logmod);


   for (p = 1, v = 0; v < logmod; v++)

   {

      alog[v] = p;

      log[p] = v;

      p <<= 1;

      if (p & b)

         p ^= poly;

   }

}
4

3 に答える 3

1

自動的に変換することはできません。

純粋なロジックを変換することは可能かもしれませんが、C++ と C# はまったく異なるライブラリを使用します。C++ は C ランタイム、MFC などを使用し、C# は .NET BCL を使用します。C++ コードで使用されるクラスとメソッドに相当する .NET について、少なくとも少しは学習する必要があります。

たとえば、代わりに配列を使用して malloc 呼び出しを変換できます。
(int*) malloc (sizeof (int) * logmod);-->new int[logmod]();

コードが多い場合は、C++ コードをそのままにして、プロキシとして機能するマネージド型を公開することにより、C++/CLI を使用して混合モード ライブラリを作成することを検討できます。

于 2012-07-24T06:16:56.460 に答える
1

c# で VC++ コードを直接使用する方法はありますか?

C++/CLI アプリケーションは .NET によって管理されます。その場合は、C# プロジェクトにプロジェクトまたは dll への参照を追加するだけで、通常どおり使用できます。

ネイティブのアンマネージ コードの場合は、C# または C++/CLI を使用してラッパーを作成するか、P/Invoke を使用して直接呼び出すことができます。

編集:
キャレット演算子について間違っていました。少し急いで答えました。申し訳ありません!削除されました。

于 2012-07-24T06:33:35.317 に答える
0

以下のオプションがあります

  1. 自動変換されていないコード部分のみを手動で C# に移植する
  2. VC++ コードを COM Visible として作成し、.NET から COM Inter-op を使用します。
  3. C# でコンポーネントを完全に書き直し、VC++ コードを使用してアプリケーション ロジックのみを参照します。

変換されたコードに安全でない操作が含まれ、安全でないフラグを付けてコンパイルする必要がある場合があります。自動変換されたコードと手元の要件を見て、自動コンバーターを使用して変換する価値があるかどうかを判断することをお勧めします。

于 2012-07-24T06:16:25.023 に答える