2010-06-04 4 views
1

У меня есть VB6 COM DLL. Я хочу использовать его из C++. Я знаю, как зарегистрировать его, создать файл tlb из DLL и #import его в C++.Как загрузить COM DLL во время выполнения

Я бы хотел, однако, загружать и использовать DLL как это динамически, во время выполнения, не зная их заранее. Это возможно?

Спасибо,

+0

Вы хотите, чтобы избежать их регистрации, или избежать создания библиотеки типов и #importing? Или оба (что я не уверен, возможно)? – MarkJ

ответ

4

Да, но вам нужно, чтобы получить этот вопрос яснее.

Иногда вы знаете интерфейс COM-интерфейса, а не реализацию. В этом случае вы можете создать фиктивную реализацию интерфейса и #import, что. Во время выполнения вы все равно зарегистрируете реальный компонент, получите от него объект (возможно, через CoCreateInstance) и сохраните его в соответствующем умном указателе.

С VB6 это немного менее прямолинейно. Это добавляет уровень косвенности. Читайте дальше на IDispatch. Вам нужно получить этот известный интерфейс для описания неизвестного интерфейса. Таким образом, неизвестный интерфейс можно получить во время выполнения.

2

IMHO, вам нужен хотя бы некоторый общий интерфейс (так что вы знали, что вызывать на стороне C++).

Я хотел бы сделать что-то вроде:

  1. Определить общий интерфейс (в его собственной DLL/TLB)

  2. реализовать этот интерфейс в одном или нескольких COM-серверов

  3. Импорт этот интерфейс на стороне C++ (назовем его клиент)

  4. Определите способ передачи progid COM-сервера, с которым вы хотите работать (динамически загружать) в клиенте.

Надеется, что это помогает

Смежные вопросы