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

Как исправить ошибку `COR_E_NEWER_RUNTIME` при вызовах COM из Delphi: правильное указание версии CLR в манифесте сборки

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

Как исправить ошибку COR_E_NEWER_RUNTIME при вызовах COM из Delphi: правильное указание версии CLR в манифесте сборки

Введение

При разработке программного обеспечения на Delphi, иногда возникают ситуации, когда необходимо вызвать COM-интерфейс, реализованный в сборке C# без её регистрации в системе. В таких случаях, если не соблюдены определенные условия, может возникнуть ошибка COR_E_NEWER_RUNTIME. В данной статье мы рассмотрим, как правильно указать версию CLR в манифесте сборки C# для корректной работы с Delphi.

Описание проблемы

Пользователь столкнулся с ошибкой COR_E_NEWER_RUNTIME при попытке создать COM-класс из сборки, скомпилированной с использованием технологии side-by-side. Это означает, что при вызове COM-интерфейса из Delphi-приложения, используется более новая версия CLR, чем та, которая поддерживается в данной ситуации.

Шаги решения проблемы

  1. Проверка версии CLR: Убедитесь, что версия CLR, для которой скомпилирована сборка C#, соответствует версии, установленной на целевом компьютере.

  2. Манифест сборки C#: В манифесте сборки C# должен быть указан элемент clrClass, который содержит атрибут runtimeVersion. Этот атрибут должен быть указан полностью и точно соответствовать версии CLR, используемой сборкой.

xml <clrClass clsid="{A0BDB20B-A6E4-4A36-A64C-CC9186DD1C3E}" progid="TestSideBySide2" threadingModel="Both" name="TestSideBySide2.SideBySideClass" runtimeVersion="v4.0.30319"> </clrClass>

  1. Правильные значения runtimeVersion: Важно использовать правильные значения для атрибута runtimeVersion, например, v1.0.3705, v1.1.4322, v2.0.50727 или v4.0.30319.

Пример кода

Вот пример кода на Object Pascal (Delphi), который демонстрирует вызов COM-интерфейса:

program TestSideBySide2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils,
  mscorlib_TLB in 'mscorlib_TLB.pas',
  TestSideBySide2_TLB in 'TestSideBySide2_TLB.pas';
var
  sideBySide : TestSideBySide2_TLB._SideBySideClass;
  intfSideBySide : TestSideBySide2_TLB.ISideBySideClass;
  res : HRESULT;
begin
  try
    sideBySide := TestSideBySide2_TLB.CoSideBySideClass.Create();
    res := sideBySide.QueryInterface(IID_ISideBySideClass, intfSideBySide);
    Writeln(intfSideBySide.Version());
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Заключение

Правильное указание версии CLR в манифесте сборки C# является ключевым моментом для успешного вызова COM-интерфейсов из Delphi. Следуя инструкциям и проверяя версию CLR, вы сможете избежать ошибки COR_E_NEWER_RUNTIME и обеспечить корректную работу вашего приложения.

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

В статье рассматривается проблема возникновения ошибки `COR_E_NEWER_RUNTIME` при попытке вызвать COM-интерфейс из сборки C# в приложении Delphi и даются инструкции по её устранению, включая корректное указание версии CLR в манифесте сборки.


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

Получайте свежие новости и обновления по 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:54:35/0.0034089088439941/0