C ++のC#を呼び出す方法

彼女の空き時間に、ノート覚えて!C ++動的ライブラリ(DLL)を呼び出す方法のC#についての録音。

ステップ:

:まず、のような、C ++クラスを作成


AddOperate.h

extern _declspec(のdllexport)int型の合計(int型int型B)を。
クラスAddOperate 
{ 
パブリック
}。

AddOperate.cpp

#include " AddOperate.h " 
の#include " のiostream " 
使って 名前空間はstdを、

INT合計(int型int型B)
{ 
    場合( - (INT)=!0 || B - (INT)B =!0 ){ 
        COUT << " 请输入整数" << ENDL。
        戻る - 1 
    } 
    戻り A + B。
}

2、DLLにコンパイルC ++コードは、DLL
構成設定をコンパイルする必要があります:
Aを:プロジェクト-属性タイプ---補償インデックス-一般的な構成タイプ--- ---ダイナミックライブラリ(.dllファイル)

 

 

 B:プロジェクト - プロパティ - 構成プロパティ - C / C ++ --- --- ---高度なC ++コード(/ TP)にコンパイルされた思考

 

 

 このイベントへのX64の注意、また、X64を使用して最高のC#を入れて呼び出します。

その後、プロジェクトをクリックして - 生成され、あなたがdllファイルが表示されます。

図3に示すように、一般的に以下のbin /デバッグ中に、ディレクトリエントリ入力にコピーC#のDLL。

C#コードで書かれた4は、DLLを呼び出します

[DLLIMPORT(" Calculate.dll "、CallingConvention = CallingConvention.Cdecl)]
         のextern  静的 int型の合計(INT A、INT B)。
        公共の 静的な 無効メイン(文字列[] argsが){
             しようと{ 
                Console.WriteLineを(" 请输入NumberAを:" );
                INT numberA = Convert.ToInt32(Console.ReadLine())。

                Console.WriteLineを(" 请输入NumberB:" );
                int型 numberB =Convert.ToInt32(Console.ReadLine())。

                Console.WriteLineを($ " numberAである:{numberA}; numberBである:{numberB}は、合計である:{合計(numberA、numberB)} " ); 
               
            } 
            キャッチ(例外例){ 
                Console.WriteLineを($ " EX:{EX} " ); 
            } 

            Console.ReadLine(); 
        }

二つの主な行:

 

 

 

「和」の方法は、DLLのメソッド名と同じでなければならない、または見つけることができません。

そして、その結果を見て:

非常に恥ずかしい、ない「和」の方法を示唆し、我々は、操作上の問題を持っています。

長い時間のための調査は、C ++のDLLをコンパイルする方法を見つけるためにする場合、メソッド名はなく、安全のため、変更されます。

ソリューション:

C言語にC ++のコードを持っていこう!

 

 このように、再度実行して、DLLが来るコンパイルします。

結果:

 

発生する可能性のあるV.その他の問題

:PInvokeの関数の呼び出しは、スタックの非対称性の原因となります

  CallingConvention = CallingConvention.Cdecl:メソッドを定義します

B:未処理System.BadImageFormatException、間違ったフォーマットのプログラムをロードしようとしています。(HRESULTからの例外:0x8007000B)

 

 

だから、OK!

 

おすすめ

転載: www.cnblogs.com/skyfreedom/p/11773597.html