0

cファイルからcppメソッドを呼び出す必要があります。私はそのためにこのインターフェースを書きました..

cpp ファイル

extern "C" void C_Test(int p){
      Class::CPP_Test(p);
}

cファイル

extern void C_Test(int p);


void C_Function(){
   C_Test(10); //error
}

C ファイルで「C_Test(int) への未定義の参照」というエラーが表示されます

何が悪いのですか?

4

3 に答える 3

1

関数プロトタイプに対してのみ extern を宣言し、正しくリンクする必要があります。これに依存して、CPP_Test(p) はクラスの静的メンバーである必要があります。そうしないと、コードが機能しません。最後に、 extern "C" はその内容を括弧で囲む必要があります。

extern "C"
{
  void C_Test(int p)
  {
    Class::CPP_Test(p);
  }
}

これが機能するかどうか教えてください。

于 2012-08-22T12:43:24.347 に答える
1

両方を C++ コンパイラでコンパイルしていますか? C++ コンパイラは、C ソース ファイルを C++ としてコンパイルする場合があります。その場合、名前マングリングが実行されるため、C ソース ファイルを C コンパイラでコンパイルする必要があります。

于 2012-08-22T13:17:15.850 に答える
0

両方のタイプのファイルに C++ コンパイラを使用しています。「C」がなくても機能します!! また、extern "c" がなくても機能します。

于 2012-08-30T14:10:54.277 に答える