Unity(C#)で使用したいC++クラスがあるので、C++ dllをコンパイルしてC#ラッパーdllを作成します。私はSWIGを使ってこれを行った。C#に値を送信するとC++のdll原因Unityクラッシュが発生する
私が行うと、この:
Graph g = new Graph();
int k = g.AddNode();
それは結構です、と私は返されたk値をチェックするためにDEBUG.LOG(k)を試してみましたし、それが正しく動作ようです。だから私は私は関数を呼び出して、戻り値を得ることができると思います。
しかし、私はこれを行うにしようとすると、Unityがクラッシュします:
g.AddNode(num_of_nodes);
は、私は値を送信しようとするたびに、それがクラッシュしますようです。なぜこれが起こっているのか分かりません。
ラップしたいクラスはMaxFlow library of Yuri Boykov and Vladimir Kolmogorovです。誰でも、このライブラリをUnityでどのように使用するかについては、何か助けてください。
オリジナルC++ add_node()関数:生成
int Graph::add_node(int num)
{
//assert(num > 0);
if (node_last + num > node_max) reallocate_nodes(num);
if (num == 1)
{
node_last -> first = NULL;
node_last -> tr_cap = 0;
node_last -> is_marked = 0;
node_last -> is_in_changed_list = 0;
node_last ++;
return node_num ++;
}
else
{
memset(node_last, 0, num*sizeof(node));
int i = node_num;
node_num += num;
node_last += num;
return i;
}
}
SWIG * _wrap.cxx、た。AddNodeの機能:
://with send param (g.AddNode(num_of_nodes)), this one will crash
SWIGEXPORT int SWIGSTDCALL CSharp_Graph_add_node__SWIG_0(void * jarg1, int jarg2) {
int jresult ;
MaxFlowGraph::Graph *arg1 = (MaxFlowGraph::Graph *) 0 ;
int arg2 ;
MaxFlowGraph::Graph::int result;
arg1 = (MaxFlowGraph::Graph *)jarg1;
arg2 = (int)jarg2;
result = (arg1)->add_node(arg2);
jresult = result;
return jresult;
}
//without send param (g.AddNode()), this one works
SWIGEXPORT int SWIGSTDCALL CSharp_Graph_add_node__SWIG_1(void * jarg1) {
int jresult ;
MaxFlowGraph::Graph *arg1 = (MaxFlowGraph::Graph *) 0 ;
MaxFlowGraph::Graph::int result;
arg1 = (MaxFlowGraph::Graph *)jarg1;
result = (arg1)->add_node();
jresult = result;
return jresult;
}
SWIGは、CSファイルた。AddNodeの機能をgrnerated
public int AddNode(int num)
{
int ret = MaxFlowGraphPINVOKE.Graph_add_node__SWIG_0(swigCPtr, num);
return ret;
}
public int AddNode()
{
int ret = MaxFlowGraphPINVOKE.Graph_add_node__SWIG_1(swigCPtr);
return ret;
}