Использование классов .Net через COM-объекты в Delphi иногда зависает - PullRequest
2 голосов
/ 20 января 2009

У меня есть набор библиотек, написанных на Delphi.NET (.NET 1.1), которые я хочу использовать в своем приложении Win32 (Delphi). Для проблем, связанных с производительностью, я решил следовать COM-маршруту.

Иногда, после перестройки DLL, когда я пытаюсь создать экземпляр объектов, доступных через COM, приложение Win32 зависает при вызове CreateComObject. Как я могу решить эту проблему?

Чтобы выставить библиотеки Delphi.NET через COM, я добавляю следующие атрибуты над каждым замедлением класса:

[Comvisible(true)] 
[Guid('some guid')] 
[ClassInterface(ClassInterfaceType.AutoDual)] 

После компиляции DLL я создаю файл TLB.pas, который содержит определения для всех общедоступных и видимых COM-классов и интерфейсов в DLL. Этот файл позволяет мне более легко использовать COM-объекты в моем приложении Delphi Win32. Наконец, я регистрирую .dll и .tlb flie, используя regasm.

Я попытался отменить регистрацию и запустить приложение Win32, которое ссылается на DLL; Я ожидал получить ошибку во время выполнения, но приложение снова зависло при вызове CreateComObject().

Я также безуспешно пытался отменить регистрацию и зарегистрировать DLL.

p.s. Я использую BDS 2006

Ответы [ 3 ]

1 голос
/ 26 января 2009

У меня смешанный опыт работы с COM; COM иногда может быть настоящей болью, чтобы стать стабильным, поэтому, если не нужно, я часто выбираю другой маршрут.

В этом случае вы можете попытаться обойти COM, используя обратный P / Invoke.

Вот несколько статей, которые могут помочь вам в этом:

http://blogs.codegear.com/timjarvis/2006/11/10/29270 http://www.blong.com/Conferences/BorConUK2002/Interop1/Win32AndDotNetInterop.htm http://www.blong.com/Conferences/BorCon2004/Interop1/Win32AndDotNetInterop.htm

Вы можете получить больше хитов, если будете гуглить на "Delphi Inverse PInvoke" , но вышеприведенные статьи - лучшие.

С уважением,

Jeroen Pluimers

0 голосов
/ 23 февраля 2009

Использование RemObjects Hydra - это простой способ смешать управляемый и неуправляемый код Delphi. Но, к сожалению, это довольно дорого - 499 долларов: (

Обновление: попробуйте Delphi.Net проект с открытым исходным кодом. Этот проект неактивен, но вы можете использовать его для взаимодействия сборки Win32 -> dotNet1.1.

0 голосов
/ 20 января 2009

Убедитесь, что вы правильно завершили код, а не просто остановили его в отладчике. Я обнаружил, что уничтожение межпроцессных приложений с помощью отладчика может вызвать всевозможные проблемы, обычно требующие перезагрузки для их устранения. Требуется дисциплина, чтобы сделать это, как обычно, вы можете сделать это без проблем.

...