3

私のC#プロジェクトにC ++ DLLを使用しています.DLLには、次のような外部関数によって作成および破棄されるクラスが含まれています。

 class myClass
 {
   int N;
   public:
        //some elements and some functions

        myClass(int n)
        {
            N=n;
        }
 };

 __declspec(dllexport) myClass * builderF(int n)
 {

      return new myClass(n);

 }

 __declspec(dllexport) void destroyerF(myClass * c)
 {

      delete c;

 }

これらは extern "C" {} 本体にあります。

コンパイラはどのように C++ 機能を使用させますか? 「C」スペースですか? Cコードだけじゃないの?これはテスト済みで動作します (C# 用の opencl ラッパーの作成を開始しました)。以前は純粋な C コードしか使用していませんでした。

4

1 に答える 1

9

extern "C"コンパイラを C コンパイラに変更しません。関数 (または関数へのポインター) がインターフェイスで C 規則を使用することだけを示しています。したがって、関数内で C++ で実行できることはすべて実行できます。影響を受けるのは、名前マングリングや呼び出し規約などだけです。

于 2013-07-31T11:50:52.710 に答える