У меня есть сторонняя DLL, которую необходимо динамически загружать с помощью LoadLibrary() и которая использует соглашение о вызовах __cdecl. Мне нужно иметь возможность использовать dll из VB6, поэтому я создал собственную DLL-оболочку, которая использует соглашение о вызовах __stdcall и экспортирует необходимые функции.
Теперь появилось дополнительное требование, и я изо всех сил пытаюсь понять, как с ним справиться; завернутая DLL предоставляет API для другого приложения, и мне нужно одновременно подключиться к двум экземплярам приложения. Это проблема, так как DLL не имеет концепции сеанса, типичное взаимодействие будет выглядеть так:
tpc_connect("service1")
// Do some stuff
tpc_disconnect()
и то, что я должен быть в состоянии сделать, это
session1 = tpc_connect("service1")
session2 = tpc_connect("service2")
// Do some stuff with session1
// Do some stuff with session2
tpc_disconnect(session1)
tpc_disconnect(session2)
Основная проблема, как я вижу, заключается в том, что один процесс может быть подключен только к одной службе, поэтому первое решение, которое я попробовал, состояло в том, чтобы переместить оболочку DLL в отдельный процесс, создав внепроцессный COM-сервер с использованием ATL. У меня сейчас проблема в том, что я получаю только один экземпляр COM-сервера.
Итак, мои вопросы (наконец): есть ли способ принудительно создать новый экземпляр COM-сервера ATL? Это лучший подход к проблеме или кто-то может придумать лучший способ решить эту проблему.
Спасибо Джексон