大家来讨论一下如何动态地使用com组件?

baberson 2004-09-08 05:59:58
dll可以调用LoadLibrary函数加载动态库,然后调用GetProcAddress来获得函数的指针,这样只要提供一个动态库和函数的名称,函数的参数,就可以使用动态库的方法了。
com组件是否也能达到这样的功能?
...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwdx 2004-09-10
  • 打赏
  • 举报
回复
up
allenq 2004-09-10
  • 打赏
  • 举报
回复
我在VB中应用COM, 直接CreateObject 用的不亦乐乎...
msdn_user 2004-09-09
  • 打赏
  • 举报
回复
com连动态库的名称和存放地点都不需要知道
不是比dll更好?
lqk586 2004-09-09
  • 打赏
  • 举报
回复
如果搂主提出的问题都明白了,那么COM组件真的能发挥优势了
lqk586 2004-09-09
  • 打赏
  • 举报
回复
我知道用IDISPATCH可以根据注册表中的内容调用.DLL的方法和属性,但不知道如果我做了一个可视化组件,如何可以随意在VIEW上加?
控件容器如何做啊?
UDX协议 2004-09-09
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/2977/2977524.xml?temp=.8665583
UDX协议 2004-09-09
  • 打赏
  • 举报
回复
四、不用CoCreateInstance or CoGetClassObject,直接从dll中得到DllGetClassObject,接着生成类对象及类实例(本方法适合于你想用某个组件,却不想在注册表中注册该组件)

演示代码:
/*前期准备工作如二方法所述,事实上只要得到CLSID和IID的定义及接口的定义就行*/

typedef HRESULT (__stdcall * pfnGCO) (REFCLSID, REFIID, void**);
pfnGCO fnGCO = NULL;
HINSTANCE hdllInst = LoadLibrary("D:\\Temp\\vc\\simpCOM\\Debug\\simpCOM.dll");
fnGCO = (pfnGCO)GetProcAddress(hdllInst, "DllGetClassObject");
if (fnGCO != 0)
{
IClassFactory* pcf = NULL;
HRESULT hr=(fnGCO)(CLSID_Foo, IID_IClassFactory, (void**)&pcf);
if (SUCCEEDED(hr) && (pcf != NULL))
{
IFoo* pFoo = NULL;
hr = pcf->CreateInstance(NULL, IID_IFoo, (void**)&pFoo);
if (SUCCEEDED(hr) && (pFoo != NULL))
{
pFoo->SayHello();
pFoo->Release();
}
pcf->Release();
}
}
FreeLibrary(hdllInst);
xdljf 2004-09-08
  • 打赏
  • 举报
回复
呵呵,com组件不需要知道名字,用id就行了,当然不dll好多了

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧