2011-08-03 29 views
5

Delphi işlevinin .net'den bir bayt dizisi üzerinde çalışmasının en iyi yolunu bulmakta zorlanıyorum.C# bayt dizisinden geçen delphi dll işlevini çağırın

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

C# kodu şöyle:

Delphi imza şöyle bayt dizisi bildirimi önce var ve ref belirtilmemesi

[DllImport("Encrypt.dll", 
    CallingConvention = CallingConvention.StdCall, 
    CharSet = CharSet.Ansi)] 
public static extern void Encrypt(
    ref byte[] bytes, 
    int bytesLength, 
    string password); 

başarısız gibiydi, ama beri gereklidir Dizinin sadece içeriğini değil, dizinin içeriğini değiştirecek miyim?

Ayrıca nedense ben işe yaramaz Length(Bytes) daha BytesLength parametre kaldırırsanız işe BytesLength parametre, Length(Bytes) başlar ekleyin ama BytesLength varsa, Delphi dizinin uzunluğunu almak gibi olamaz yanlış bir değer.

cevap

2

Delphi Encrypt'un ilk parametresini Bytes: PByte olun ve gitmek için iyi olmalısınız.

Açık bir dizi, elinizde olduğu gibi, işaretçiyi hem ilk öğeye hem de sorunuzda açıkladığınız şeyi açıklayan uzunluğa geçirmeyi umuyor.