dllexport Struct указатели и возвращающие uint8_t - PullRequest
1 голос
/ 07 мая 2019

Я создаю библиотеку оболочки для использования в приложении ac #.В моем .c функция определена:

__declspec(dllexport) uint8_t aes132h_nonce(struct aes132h_nonce_in_out *param)
{ 
 // do something
 return 0; 
} 

В моем C # как определить функцию, которая получает указатель на структуру и возвращает uint8_t?

    [DllImport("AesHelperLib.dll")]
    public static extern uint8_t aes132h_nonce(ref aes132h_nonce_in_out *param);

Нужно ли создавать структуру с правильными отступами и выравниванием в c # или есть способ экспортировать структуру aes132h_nonce_in_out, чтобы я мог использовать структуру в c #?Кроме того, как определить тип возвращаемого значения, как uint8_t не является допустимым типом в C #?

1 Ответ

2 голосов
/ 07 мая 2019

Нужно ли создавать структуру с правильными отступами и выравниванием в c #

По сути, да: нет способа использовать объявления структуры C непосредственно в C #, и нет отображения 1: 1. Помните, что если вы объявите параметр в вашем импорте DLL как ref, вам также не следует указывать его.

В некоторых случаях, например, когда просто «пропускают» значение между вызовами API, вы также можете просто объявить параметр как (в данном случае передать по значению) IntPtr и обработать его содержимое как непрозрачный тип.

Кроме того, как определить тип возвращаемого значения, как uint8_t не является допустимым типом в c #?

В рекомендациях о взаимодействии говорится, что используется ближайший эквивалентный тип .NET - в данном случае byte.

.
...