Swig c++/c#keep get“;类型初始化异常”;

本文关键字:类型 初始化 异常 c++ c#keep get Swig | 更新日期: 2023-09-27 18:00:25

我目前正在创建我的第一个swig项目。我有一些c++代码,其中我使用了c#UI中的一个类函数。我创建了一个.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)。

提前感谢

Swig c++/c#keep get“;类型初始化异常”;

对我有效的是:

  1. 将####.cxx添加到c++项目并重新生成以获得新的dll(可能需要更正一些错误)
  2. 将该新dll文件复制到[C#]''bin''x86''Debug(Release)
  3. 转到构建->配置管理器。对于C#项目,将AnyCpu更改为x86并重新构建。

    参考