1

我目前正在创建我的第一个 swig 项目。我有一些 c++ 代码,我在我的 c# UI 中使用 1 个类函数。我创建了一个看起来像这样的 .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 回答