Используйте C # DLL в качестве COM под Delphi - PullRequest
1 голос
/ 03 сентября 2010

Мы получили DLL, написанную программистами на C #, скомпилированную для использования в качестве COM-объекта.

Мы консультируемся с этими разработчиками, чтобы получить имена функций и синтаксис, и мы можем использовать его после того, как зарегистрировали его с помощью regasm.

Это нормально, но у нас больше вопросов для ускорения разработки (при изменениях), а некоторые вещи непонятны или не работают.

Мы использовали Delphi 6 professional, а сборка сделана на C # Visual Studio 2008 (как мне кажется).

Давайте посмотрим на них:

1). Я не могу использовать typelib (TLB) кода C #, потому что я не могу импортировать в Delphi.

Результат был:

"Hiba az OLE beállításjegyzék használata közben."

Translate ~ "Error occured on use OLE typelib/setting lib"

Возможные источники ошибки:

a.) Delphi 6 не может импортировать новые COM-файлы DLL.

b.) Мы должны заставить C # генерировать более старый отформатированный TLB.

Мы попытались сгенерировать TLB с помощью regasm, но мы также получили эту ошибку.

Может, это невозможно, но если случится случай b.), Что нам нужно сказать разработчикам на C # - как скомпилировать DLL-ы?

(DLL-файлы не импортируются Delphi, потому что у них нет секции самостоятельной инициализации).

2). Интересно: Все параметры правильно преобразованы в варианты, наоборот, но если метод C # не имеет параметра, я получил ошибку в Delphi стороне ... Например (псевдо):

proc A():bool;

Вызов A вызывает ошибку на стороне Delphi.

proc A(Dummy: bool):bool;

Вызов A (False) работает нормально.

Я не знаю, почему мы получили это. Что вы думаете об этом? Это проблема компиляции C #?

Спасибо за вашу помощь: дд

1 Ответ

1 голос
/ 31 марта 2011

Лучший способ здесь - получить исходный код, показывающий успешное использование DLL через COM с использованием, скажем, C #. Разработчики DLL должны быть в состоянии обеспечить это. DLL, вероятно, также должна быть зарегистрирована с regasm (, а не regsvr32.exe, как это было бы для собственной COM-библиотеки DLL), прежде чем она будет доступна через COM. Как всегда, без более актуального кода очень сложно ответить на такие вопросы.

...