2011-08-03 21 views
5

Tengo problemas para determinar la mejor manera de operar una función delphi en una matriz de bytes desde .net.Llamada a la función delphi dll desde C# que pasa en una matriz de bytes

La firma Delphi se ve así:

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

El C# código es el siguiente:

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

Omitiendo var y ref antes de la declaración matriz de bytes parecía fallar, pero es lo necesario, ya ¿Cambiaré solo el contenido de la matriz y no la matriz en sí?

También, por alguna razón por la que parece que no puede obtener la longitud de la matriz de Delphi, si quito el parámetro BytesLengthLength(Bytes) que no va a funcionar, si añadir los parámetros, BytesLengthLength(Bytes) empieza a funcionar, pero tiene BytesLength un valor equivocado

Respuesta

2

Haga que el primer parámetro de Delphi Encrypt sea Bytes: PByte y que esté listo para funcionar.

Una matriz abierta, como la tiene, espera pasar el puntero al primer elemento y la longitud que explica lo que describe en su pregunta.

Cuestiones relacionadas