话题很无聊,全当扩大词汇量了,呵呵
解决方案 »
- Vs2010中使用Teechart控件问题
- 急急急!!!关于虚拟列表显示的问题
- 做了个Mis平台,用来生成Mis,请大家提提意见(来者有分)
- 在SDI框架中的对话框怎么没有初始化Oninitial()函数呢?
- CWnd CDC hCdc 得具体区别在哪里
- 关于纯资源DLL的问题
- 求助——网吧管理系统的计费系统该如何设计(急)?
- 高分相送;在SDI中的菜单上“文件-打开”被灰掉了,对应的CToolBar也灰掉了。怎么把它恢复。当然功能还要打开功能。
- try,catch,finally三者如何连用?
- 做计算器时,关于消息映射遇到的问题,和nID的问题
- 各位大侠,怎样在edit中实现自动换行?
- 看看我的用户ID,爱国的表现就是这样的,同意的顶一下。
老兄说的我觉得听说过COM的都知道,我想要些代码to handsomebaby(小新)
兄台能否详细说说?代码
我只有一个DLL和它书面的说明,怎么使用它?
IID为IID_IYourInterface
CLSID为CLSID_YourInterface有方法如下
HRESULT DoSomething();
在双接口中的DISPID为DISPID_DoSomething
HRESULT hr;
如果你有头文件
1.
IClassFactory* pCF = NULL;
hr = ::CoGetClassObject(CLSID_YourInterface, CLSCTX_ALL, NULL, IID_IUnknown, (void**) &pCF);
if (FAILED(hr))
{
return;
}IUnknown* pUnknown = NULL;
hr = pCF->CreateInstance(NULL, IID_IUnknown, (void**) &pUnknown);
pCF->Release();
if (FAILED(hr))
{
return;
}IYourInterface* pYourInterface = NULL;
hr = pUnknown->QueryInterface(IID_IYourInterface, (void**) &pYourInterface);
pUnknown->Release();
if (FAILED(hr))
{
return;
}pYourInterface->DoSomething();
pYourInterface->Release();2.
IUnknown* pUnknown = NULL;
hr = ::CoCreateInstance(CLSID_YourInterface, NULL, CLSCTX_ALL, IID_IUnknown, (void**) &pUnknown);
if (FAILED(hr))
{
return;
}IYourInterface* pYourInterface = NULL;
hr = pUnknown->QueryInterface(IID_IYourInterface, (void**) &pYourInterface);
pUnknown->Release();
if (FAILED(hr))
{
return;
}pYourInterface->DoSomething();
pYourInterface->Release();3.
#include <atlbase.h>CComPtr<IYourInterface> pYourInterface = NULL;
hr = pYourInterface.CoCreateInstance(IID_IYourInterface, NULL, CLSCTX_ALL);
if (FAILED(hr))
{
return;
}pYourInterface->DoSomething();
pYourInterface.Release();如果你的是有TypeLib信息的话,你可以
#import "YourInterface.DLL"4.
IYourInterfacePtr pYourInterface = NULL;
hr = pYourInterface.CoCreateInstance(IID_IYourInterface, NULL, CLSCTX_ALL);
if (FAILED(hr))
{
return;
}pYourInterface->DoSomething();
pYourInterface.Release();如果是双接口的话,还有一种
5.
#include <oaidl.h>CComPtr<IDispatch> pDisp = NULL;
HRESULT hr = pDisp.CoCreateInstance(CLSID_YourInterface);
if (FAILED(hr))
{
return;
}DISPID dispid;
OLECHAR FAR* szMember = L"DoSomething";
hr = pDisp->GetIDsOfNames(IID_IYourInterface, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (FAILED(hr))
{
return;
}DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
hr = pDisp->Invoke(dispid, IID_IYourInterface, LOCALE_USER_DEFAULT, DISPATCH_METHOD,
&dispparamsNoArgs, NULL, NULL, NULL);pDisp.Release();(当然,这里的IDispatch接口也能通过前面第1、2中情况进行创建)
最直接的是用COM API如CoCreateInstance(),CoGetClassObject()。
其次是用#import导入类型库,对指针和接口进行了简单的包装。
最次是用C++类对ActiveX控件的完全包装。
虽然他调用api很方便,但现在觉得用它开发界面实在太麻烦了
想用 Delphi 或者 vb 或者 c++builder请问那一种好些(只写界面, 内核用com)???thanks
你熟悉哪种就用那种啦!