C DLL の関数は次のようになります。
int my_Funct(char* input, char* output);
これを C# アプリから呼び出す必要があります。私は次の方法でこれを行います:
...DllImport stuff...
public static extern int my_Funct(string input, string output);
入力文字列は完全に DLL に送信されます (私はそれを目に見える形で証明しています)。関数が記入する出力は間違っています。次のようなヘキサデータがあります。
3F-D9-00-01
しかし残念ながら、2 つのゼロの後にあるものはすべてカットされ、最初の 2 バイトだけが C# アプリに送られます。これは、(私が推測するに) null 文字として扱い、文字列の末尾として使用するために発生します。
どうすればそれを取り除くことができますか?文字列ではなく out IntPtr として指定しようとしましたが、その後どうすればよいかわかりません。私は後にやろうとしました:
byte[] b1 = new byte[2];
Marshal.Copy(output,b1,0,2);
2 は通常、バイト配列の長さです。しかし、「要求された範囲が配列の末尾を超えています」など、あらゆる種類のエラーが発生します。または「保護されたメモリの読み取りまたは書き込みを試みました...」
助けていただければ幸いです。