2011-08-03 35 views
5

Tôi đang gặp khó khăn trong việc tìm ra cách tốt nhất để có chức năng delphi hoạt động trên một mảng byte từ .net.Gọi hàm delphi dll từ C# đi qua trong mảng byte

Chữ ký delphi trông như thế này: Mã

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

C# trông như thế này:

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

Bỏ varref trước khi khai báo mảng byte dường như thất bại, nhưng nó đòi hỏi từ Tôi sẽ chỉ thay đổi nội dung của mảng chứ không phải chính mảng đó?

Ngoài ra, đối với một số lý do tôi dường như không thể có được chiều dài của mảng trong delphi, nếu tôi loại bỏ các tham số BytesLength hơn Length(Bytes) sẽ không làm việc, nếu tôi thêm BytesLength tham số, Length(Bytes) bắt đầu làm việc nhưng BytesLength có một giá trị sai.

Trả lời

2

Làm cho thông số đầu tiên của Delphi EncryptBytes: PByte và bạn nên làm tốt.

Một mảng mở, như bạn có, dự kiến ​​sẽ được chuyển cả con trỏ đến phần tử đầu tiên và độ dài giải thích những gì bạn mô tả trong câu hỏi của bạn.