1

私は現在、最初のswigプロジェクトを作成しています。C# UI でクラス関数の 1 つを使用している C++ コードがいくつかあります。次のような .i ファイルを作成しました。

%module mymodule
%{
    #include "Simulation.h"
%}

/*****************************************************************************
 *                            SOME DEFINITIONS                               *
 *****************************************************************************/

#define EXAMPLE_DEFINITION 'a'
#define EXAMPLE_DEFINITION_2 'x'


class Simulation
{
public:
    // BUNCH OF FUNCTIONS
    static unsigned int getTick();
    static void tick();
// BUNCH MORE FUNCTIONS
private:
    // A BUNCH MORE THINGS
};

以下を使用して cs ファイルを追加しました。

swig -c++ -csharp -outdir UI -o cpp/simulation_wrap.cpp Simulation.i

それはいくつかのファイルを生成し、それを私の c# プロジェクトに追加します。私のコードに次の行を追加すると:

Simulation.getTick();

また

Simulation.tick();

コンパイル エラーは発生しませんが、次の実行時エラーが発生します。

The type initializer for 'mymodulePINVOKE' threw an exception.

ステップを逃したことがありますか?私はこれを検索しようとしましたが、成功することができませんでした。

(おそらく、C++ を dll および lib としてコンパイルしようとしたことに注意することが重要です)。

前もって感謝します

4

1 に答える 1

3

私にとってうまくいったのは:

  1. ####.cxx を C++ プロジェクトに追加し、再構築して新しい dll を取得します (エラーを修正する必要がある場合があります)。
  2. その新しい dll ファイルを [C#]\bin\x86\Debug (Release) にコピーします。
  3. ビルド->構成マネージャーに移動します。C# プロジェクトの場合、AnyCpu を x86 に変更して再構築します。

    参照

于 2012-11-27T09:46:18.327 に答える