я написал в Go dll, чтобы расшифровать / зашифровать данные с кодировкой открытого / секретного ключа.
Первая проблема, с которой я столкнулся, - это совместное использование строк между dll и кодом c #.
Я решил это, используя библиотеку C в Go.
func myfunc( password *C.char, passwordLength C.int ) *C.char{
result = C.GoStringN(password, passwordLength)
return C.CString(result)
}
Более или менее Нечто подобное.
В C # аналогом является
Marshal.PtrToStringAuto(value);
Моя проблема сейчас в том, что строки не совпадают в go и c #.Одна функция возвращает зашифрованное значение, и когда я регистрирую его с помощью
fmt.println(...)
Это не соответствует возвращаемому значению, которое я регистрирую в c #
Console.writeln(...)
Я пробовал разные функции:
Marshal.PtrToStringAuto(...)
Marshal.PtrToStringAnsi(...)
Marshal.PtrToStringUTF8(...)
Marshal.PtrToStringUni(...)
После использования библиотеки C у меня тоже были проблемы со строками в go.Из-за этого я добавил длину и перешел из C.GoString в C.GoStringN, что помогло при отладке кода в Go.
Я действительно не знаю, что я делаю неправильно.Кто-нибудь знает, что я мог бы попробовать?
Выход Go 1
Выход Go 2
Я решил частьпроблема.Вывод шифрования имеет определенный размер.Так что в Go я теперь могу правильно читать значения.Какие варианты у меня есть в C #, чтобы правильно прочитать значения?Marshal.PtrToStringUTF8, кажется, работает лучше всего из функций Marshal.Но это не равно значению от Go.