|
分類:[C#]
C#から、C/C++のDLL関数を呼び出したいです。
以下のようなケースで、C/C++のDLL関数を呼び出すための記述方が分かりません。
ご教示いただきますようお願いします。
1. DLL側の関数で、BYTE* を引数とする関数があり、それを使用したいです。
BYTE型のバッファ(呼び出し側であらかじめ確保しておく)を引数とし
DLL側の関数を呼び出すと、そのDLL側の関数に値をコピーするといったイメージです。
2. DLL側の関数ではこのようになっています
int GetData (BYTE* arg_Buf)
{
memcpy(arg_Buf, m_OutputBuf, BufferSize); // BufferSize = 100
}
3. C#側での宣言は以下のようにしました
[DllImport("DataCopy.dll")]
static extern int GetData (ref byte [] arg_Buf);
4. 実際の使用時にはこうしました
byte[] pucImgOut = new byte[100];
GetData(ref OutBuf);
プログラム実行時、4.の関数GetDataまではブレークポイントの設定が行なえるのですが、
4.の関数GetData実行途中でプログラムの実行が終了してしまいます。
原因も分からない状態ですが、GetDataの宣言または呼び出し方が悪いのではないかと思っています。
また、同じDLLに存在する他の関数(値渡し)に対しても同様にC#で呼び出しを行ないましたが、
すべて正常に呼び出しが行なわれ、期待する戻り値が得られています。
どなたかアドバイスをください。
以上、よろしくお願いします。
|