2012-05-01 8 views
1

Мы интегрирующего программного обеспечения компания, связиста в наши собственные делать вещи, как отвечать на вызовы, перенося вызовы, соответствие номеров с клиентами и т.д.Недостатки использования TLB (и Tlbimp.exe) с C#

Они дали нам документацию API, которая включает в себя файл TLB. Мы использовали инструмент tlbimp для создания сборки, которую мы теперь хотим использовать в нашей реализации.

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

Это заставило меня подумать: есть ли какие-либо другие подводные камни, о которых я должен знать при использовании tlbimp.exe и TLB в целом? Было бы лучше создать код DllImport/ComImport/PInvoke вручную?

ответ

2

В целом, если у вас есть TLB, я бы хотя бы начал свою работу, потребляя сборку, изготовленную tlbimp.

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

Если вы обнаружили какие-либо проблемы в будущем, вам следует подумать о том, чтобы начать копировать исправления. Но я, конечно, не начал бы так.

2

Вы не можете вызывать тип методов интерфейса COM, объявленных в библиотеке типов. DLL, реализующая COM-сервер, не экспортирует эти методы. Вы можете использовать последнее связывание с отражением или ключевое слово dynamic, но это болезненно и подвержено ошибкам. Используйте библиотеку импорта, вот почему она есть.