これは、ネイティブCメソッドのシグネチャです。のPInvokeの問題
これは私がC#のからそれを呼び出す方法です:
byte[] arrayIn= Encoding.UTF8.GetBytes(source);
uint arrayInSize = (uint)arrayIn.Length;
byte[] arrayOut = new byte[100];
uint[] arrayOutSize = new uint[1];
arrayOutSize[0] = (uint)arrayOut.Length;
fixed (byte* ptrIn = arrayIn, ptrOut = arrayOut)
{
if (nativeMethod1(ptrIn, arrayInSize, ptrOut, arrayOutSize))
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
}
といくつかのDllImport
コード
[DllImport(@"IcaCert.dll", EntryPoint = "CreateCert2", CallingConvention = CallingConvention.Cdecl)]<br>
public unsafe static extern bool CreateCert2WithArrays(
byte* data, uint dataSize,<br>
byte* result, uint[] resultSize);
文書によると、ネイティブメソッドはarrayOutがarrayInに応じた値で満たさ返す必要があります。そのサイズが必要以上に小さい場合はfalseを返します。そうでなければ真。私はarrayOutに850要素が必要だと考えました。したがって、新しいbyte [100]配列を作成すると、関数はfalseを返すはずですが、常にtrueを返します。どうして?
なぜあなたは安全でないコードを使用していて、修正しましたか?それはここでは必要ありません。 –
しかし、私はバイト*ポインタを使用して、それは危険である必要がありますさらに、この部分のバイト* ptrIn = arrayInは固定されている必要があります。 – Sergey
あなたは 'byte *'を使う必要はありません。私の答えは –