Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование DLL из Delphi в PowerShell: обход ошибки сборки без C#

Delphi , Файловая система , DLL и PlugIns

Использование DLL из Delphi в PowerShell: обход ошибки сборки без C

Введение

При работе с PowerShell иногда возникает необходимость использования внешних библиотек, созданных в других языках программирования, например, в Delphi. Однако, PowerShell предназначен для работы с управляемыми кодами (.NET), и для использования не управляемых библиотек (unmanaged DLLs), таких как созданные в Delphi, требуется использование P/Invoke.

Проблема

Пользователь столкнулся с проблемой при попытке загрузить DLL, созданную в Delphi (Delphi 10), непосредственно в PowerShell с помощью метода Reflection.Assembly::LoadFile(). При этом возникала ошибка, указывающая на отсутствие сборки в модуле, что является нормальным поведением, поскольку PowerShell ожидает управляемые сборки.

Решение

Для решения проблемы необходимо использовать P/Invoke в PowerShell для работы с не управляемыми библиотеками. Ниже приведен пример кода на Object Pascal для создания DLL в Delphi, а также скрипт на PowerShell для использования этой DLL.

Пример кода на Object Pascal для DLL в Delphi

library TestDLL;

uses
  SysUtils;

function TestCall(foo: PChar): Integer; stdcall;
begin
  Result := StrLen(foo); // Возвращает длину строки
end;

exports
  TestCall;

begin
end.

Пример PowerShell скрипта для использования DLL

$signature = @'
[DllImport(@"C:\Desktop\TestDLL.DLL", CharSet=CharSet.Unicode)]
public static extern int TestCall(string foo);
'@;

$type = Add-Type -MemberDefinition $signature -Name Win32Utils -Namespace TestDLL -PassThru;

[int] $retval = $type::TestCall("test string"); // Передаем строку для примера
Write-Host($retval); // Выводим результат

В примере PowerShell скрипта используются директивы для описания внешней функции TestCall, которая затем может быть вызвана в коде PowerShell.

Выводы

Использование DLL, созданных в Delphi, в PowerShell возможно, но требует применения технологий P/Invoke для взаимодействия с не управляемым кодом. Приведенные примеры демонстрируют базовый механизм такого взаимодействия. Для более сложных функций и аргументов могут потребоваться более продвинутые техники и дополнительные примеры, которые легко найти в интернете.

Заключение

Пользователи, сталкивающиеся с аналогичными проблемами, могут использовать данное руководство для начала работы с не управляемыми библиотеками в PowerShell без необходимости оборачивания их в C# сборки.

Создано по материалам из источника по ссылке.

В инструкции описан процесс использования DLL, созданной в Delphi, в PowerShell с использованием P/Invoke для обхода ошибки сборки без необходимости оборачивания в C#.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 10:52:42/0.0032939910888672/0