Как использовать dll функции c указателя байта в c#? - PullRequest
1 голос
/ 05 апреля 2020

У меня есть библиотека DLL, которая похожа на

void Decrypt(BYTE* RoundKey, BYTE* Data){...}

Это простая функция дешифрования, которая получает ключ и указатель данных и дешифрует только данные. Я хочу использовать эту DLL в C#, поэтому я написал пример тестового кода

[DllImport("test.dll", CallingConvention = CallingConvention.Cdecl)]
extern private static unsafe void decrypt(byte* RoundKey, byte* Data);

static unsafe void Main(string[] args) {
   public static byte[] Key = {0x00, ....};
   public static byte[] data = {0x00, ....};
   decrypt(&Key, &data);
}

И этот код не компилируется. Я хочу узнать, как использовать эту DLL в C#?

1 Ответ

1 голос
/ 05 апреля 2020

Просто напишите это следующим образом (при условии, что библиотека dll знает ключ и размер данных):

[DllImport("test.dll", CallingConvention = CallingConvention.Cdecl)]
private static unsafe extern void Decrypt(byte* roundKey, byte* data);

public static byte[] Key = { 0x00, ...};
public static byte[] Data = { 0x00, ... };

static unsafe void Main(string[] args)
{
       fixed (byte* keyPtr = Key)
       {
              fixed(byte* dataPtr = Data)
              {
                    Decrypt(keyPtr, dataPtr);
              }
       }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...