Я пытаюсь ссылаться на C# DLL в моем проекте InnoSetup. Мне нужна простая функция с одним строковым параметром и возвращаемым значением строки. Но даже после примера и попыток разного рода маршалинга я всегда оказываюсь в нарушении доступа.C# DLL в Inno Setup Access Violation
Это мой C# класс:
public class NKToolbox
{
[DllExport("EncryptPassword", CallingConvention.StdCall)]
static string EncryptPassword([MarshalAs(UnmanagedType.LPStr)] string password)
{
File.WriteAllText(@"C:\temp\test.txt", password);
return password.Length.ToString();
}
}
Я поместил File.WriteAllText
, чтобы увидеть, если метод даже называется. Но нет. Я пользуюсь пакетом UnmanagedExports от Роберта Гизеке.
И Inno Setup Code:
function EncryptPassword(pw: WideString): WideString;
external '[email protected]:nktoolbox.dll stdcall';
function InitializeSetup: Boolean;
var
str: WideString;
begin
str := EncryptPassword('sdvadfva');
log(str);
result := False;
end;
На линии str := EncryptPassword('sdvadfva')
я получаю «Нарушение прав доступа по адресу ...... Написать адреса .....» Я использую Inno Setup 5.5.9 Unicode.
Я испробовал это с различными утверждениями маршалинга, которые я нашел в других потоках, я пробовал это с ключевым словом out
, с нормальным string
и WideString
безнадежно.
Извините за поздний ответ, у меня не было времени проверить его до сих пор. Однако это работает как шарм! Спасибо. –