Я использовал информацию в этом сообщении Delphi - Accessing data from dynamic array that is populated from an untyped Pointer и другие, а также Robert Giesecke's Unmanaged Exports, чтобы написать отличный код - спасибо всем. Например, я написал методы, которые возвращают сложный поток байтов из C# обратно в Delphi. У меня возникают проблемы, однако, простейшая вещь - возвращение целого числа из вызова функции.Возврат Int32 из управляемого кода в Delphi
Итак, я определяю этот прототип в Delphi:
TReturnIntFunc = function(AnInteger: Integer): Integer; safecall;
и это в C#:
[DllExport("NegateInt", CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.I4)]
static Int32 NegateInt([MarshalAs(UnmanagedType.I4)] Int32 AnInteger)
{
return AnInteger * -1;
}
Как и с другими методами, которые я написал, я динамически загрузить C# DLL, найти функция просто прекрасна, но когда я выполняю ее из Delphi, она выдает исключение с сообщением «Исключение в методе safecall».
Любые подсказки кому-нибудь? Я могу и иметь маршал обратно вне или ref целое число, а не как возвращаемое значение.
Safecall список аргументов переписывается. Он изменяет количество аргументов вашей функции. Вот почему вы получаете ошибку времени выполнения. –