Как передать параметр StringBuilder в C # типам ctypes в python, который не является типом данных, поддерживаемым обычными типами ctypes - PullRequest
0 голосов
/ 29 октября 2018

Я работаю над проектом, в котором есть проект c #, использующий dll:

    public string GetMachineKey()
    {
        StringBuilder buff = new StringBuilder();
        buff.Length = 128;
        ZwCommDll.GetCPUMachineKey(buff, 128);
        string mk = buff.ToString();
        return mk;
    }

и я хочу сделать это так же, как в python использовать ctypes.

Но меня так смущает StringBuilder DataType.

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 29 октября 2018

Используйте ctypes.create_unicode_buffer() для генерации доступного для записи буфера текстовой строки (wchar_t *) для API. Используйте ctypes.create_string_buffer() для записи байтового буфера строки (char *). Что-то вроде следующего должно работать, если функция принимает char*:

>>> import ctypes
>>> buff = ctypes.create_string_buffer(128)
>>> ZwCommDll.GetCPUMachineKey(buff,128)
>>> buff.value
b'<returned string>'
...