В контексте обсуждения пользователя Delphino и последующих ответов от Martin_fr и LV, становится ясно, что проблема связана с архитектурой процессора. Martin_fr указал на то, что обработчик методов реализован только для 32-битных систем (Has MyAllMethodsHandler), что может быть причиной неработоспособности в 64-битной версии.
LV подтвердил это наблюдение, упомянув пост, где обсуждалась аналогичная проблема. Также LV предложил обратиться к репозиторию проекта на GitHub для возможного решения проблемы и поделился личным опытом успешного использования PascalScript в 64-битной версии с некоторыми корректировками.
Delphino нашел рабочий обходной путь, используя Runner.RunProcPN вместо GetProcAsMethodN, что позволило ему вызвать функции из скриптов в 64-битной версии Lazarus.
Решение проблемы
Для начала рассмотрим код, который пытается использовать функцию внутри PascalScript:
TestFunc := TTestFunction(Exec.GetProcAsMethodN('Test'));
if @TestFunc <> nil then
begin
//ShowMessage('Result from TestFunc(''test indata''): '+TestFunc('test indata'));
writeln('Result from TestFunc(''test indata''): '+TestFunc('test indata'));
end;
const
Script = 'function test(s: string): string; begin MyOwnFunction(''Test Called with param: ''+s); Result := ''Test Result: '''+s; end;';
В контексте предоставленного примера кода и обсуждения пользователей, можно предположить следующее:
Проблема связана с архитектурными особенностями 64-битных систем.
Использование GetProcAsMethodN не работает в 64-битной версии из-за ограничений реализации обработчика методов.
Альтернативный подход, предложенный Delphino, заключается в использовании Runner.RunProcPN, который позволяет корректно вызывать функции из скриптов.
Альтернативное решение
В качестве альтернативного решения можно рассмотреть следующие шаги:
Проверка наличия обновлений для PascalScript, которые могут включать исправления для 64-битных систем.
Обращение к сообществу разработчиков через GitHub или форум Lazarus за помощью и советами.
При необходимости внесение изменений в код компонентов PascalScript для обеспечения совместимости с 64-битной архитектурой.
Пример кода
Приведем пример корректного добавления функции MyOwnFunction в контекст исполнения скриптов:
function MyOwnFunction(s: string): string;
begin
Result := 'Test Result: '+s; // Здесь может быть любая логика обработки данных
end;
procedure TpsForm1.PSScript1Compile(Sender: TPSScript);
begin
Sender.AddFunction(@MyOwnFunction, 'function MyOwnFunction(s: string): string;');
end;
Заключение
Использование Runner.RunProcPN вместо GetProcAsMethodN может быть ключом к решению проблемы в 64-битной версии Delphi. Однако для более глубокого понимания и возможного устранения корня проблемы, рекомендуется обратиться к сообществу разработчиков или проверить наличие обновлений.
Контекст обсуждения касается проблемы совместимости скриптов PascalScript с 64-битной версией среды разработки Lazarus, вызванной ограничениями реализации обработчика методов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS