Нужен лучший способ для создания COM взаимодействия

Мне нужно использовать BITS COM https://msdn.microsoft.com/en-us/library/windows/desktop/aa362708(v=vs.85).aspx в нашем.NET-проекте. Я не могу использовать сторонние библиотеки, которые обертывают интерфейс BITS, но, честно говоря, выбор в любом случае невелик. Итак, по-видимому, я застрял с генерацией RCW ( https://msdn.microsoft.com/en-us/library/5dxz80y2(v=vs.110).aspx), и самый обычный способ сделать это - tlbimp.exe который сделал свою работу, но с предупреждениями. В результате у меня есть одна структура, помеченная как ComConversionLoss

[ComConversionLoss]
[StructLayout(LayoutKind.Explicit, Size = 8, Pack = 4)]
public struct BG_AUTH_CREDENTIALS_UNION {
}

Скорее всего, это произошло потому, что это объединение в C++, а tlbimp.exe не знал, как его сгенерировать правильно. Единственным предложением для подобных случаев было декомпилировать сгенерированную DLL с помощью ildasm.exe, исправить ее и перекомпилировать снова. Я думаю, что технически я могу это сделать, но я бы предпочел не делать этого, если есть лучший способ, о котором я, возможно, не знаю. Я также нашел tlbimp2.exe, который не помог в моем случае, поэтому я ищу лучшую альтернативу tlbimp.exe, которая могла бы обработать этот случай и в идеале генерировать COM-оболочки с IDisposable реализацией для детерминированного контроля над Время жизни COM-объектов, но это отдельный вопрос. Прежде всего, мне нужен этот другой инструмент для правильной обработки моего случая (типы объединения C++). Кто-нибудь знает такой инструмент?

1 ответ

Как правило, .NET был разработан, чтобы полностью заменить COM. Между.NET и COM существует нисходящая совместимость. Но порядок предпочтений очевиден: .NET Code (MSIL) > COM > собственный код.

Существует довольно часто используемая сторонняя библиотека.NET BITS. Было бы лучше, если бы вы использовали это, в отличие от COM-взаимодействия. /questions/21829125/est-li-vnet-modul-bits/21829140#21829140 Sharp BITS является открытым исходным кодом, поэтому я полагаю, что вы можете использовать его для своих нужд кодирования.

Другие вопросы по тегам