2011-08-03 26 views
5

デルファイ関数を.netからバイト配列で操作する最も良い方法を考え出すのに問題があります。デルファイdll関数をC#からバイト配列で渡します。

デルファイシグネチャは次のようになります。

procedure Encrypt(
    var Bytes: array of byte; 
    const BytesLength: Integer; 
    const Password: PAnsiChar); stdcall; export; 

C#のコードは次のようになります。

ので、バイト配列の宣言が失敗するように見えたが、それが必要とされる前に、 varrefを省略
[DllImport("Encrypt.dll", 
    CallingConvention = CallingConvention.StdCall, 
    CharSet = CharSet.Ansi)] 
public static extern void Encrypt(
    ref byte[] bytes, 
    int bytesLength, 
    string password); 

私は配列の内容だけを変更し、配列自体は変更しないでしょうか?

また、何らかの理由で私は動作しませんLength(Bytes)よりBytesLengthパラメータを削除した場合、私は仕事にBytesLengthパラメータ、Length(Bytes)開始を追加しますが、BytesLength持っている場合、デルファイの配列の長さを得るように見えることはできません間違った値。

答えて

2

Encryptの最初のパラメータをBytes: PByteとすればいいです。

開いている配列は、最初の要素へのポインタとあなたの質問に記述する内容を説明する長さの両方を渡すことが必要です。

関連する問題