开发者

How to load COM DLL at runtime

I have a VB6 COM DLL. I want to use i开发者_高级运维t from C++. I know how to register it, generate a tlb file from the DLL, and #import it in C++.

I'd like however, to load and use DLLs like this dynamically, at runtime, without knowing them in advance. Is this possible?

Thanks,


Yes, but you need to get the question clearer.

Sometimes, you do know the COM interface upfront, just not the implementation. In that case, you can create a dummy implementation of the interface and #import that. At runtime, you'd still register the real component, get an object from it (via CoCreateInstance probably) and store that in an appropriate smart pointer.

With VB6, it's a bit less direct. This adds a level of indirection. Read up on IDispatch. You need to get that known interface to describe an unknown interface. That way, the unknown interface can be obtained at runtime.


IMHO, You need at least some common interface (so you known what to call in the C++ side).

I'd do something like:

  1. Define a common interface (in its own DLL/TLB)

  2. Implement this interface in one or more COM servers

  3. Import this interface in the C++ side (let's call it client)

  4. Define a way to pass the progid of the COM server you want to work with (load dynamically) in the client.

Hope this helps


Take a look at these two MSDN articles about Registration-Free Activation of COM Components:

  • Registration-Free Activation of COM Components: A Walkthrough
  • Escape DLL Hell: Simplify App Deployment with ClickOnce and Registration-Free COM

There also have been some similar question here on StackOverflow:

  • Generate manifest files for registration-free COM
  • Windows/C++: how to use a COM dll which is not registered
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜