话题很无聊,全当扩大词汇量了,呵呵

解决方案 »

  1.   

    可以使用智能指针,可以使用包装类,可以直接使用COM库函数!
      

  2.   

    to win32c(win32c)
    老兄说的我觉得听说过COM的都知道,我想要些代码to handsomebaby(小新)
    兄台能否详细说说?代码
    我只有一个DLL和它书面的说明,怎么使用它?
      

  3.   

    假设你的COM接口是IYourInterface
    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中情况进行创建)
      

  4.   

    我只有一个DLL和它的一些方法的说明,那怎么办?我见到有个VARIANT,不知道怎么使用
      

  5.   

    VARIANT,变体类型,查查msdn一看就明了。一起学习。
      

  6.   

    多种。
    最直接的是用COM API如CoCreateInstance(),CoGetClassObject()。
    其次是用#import导入类型库,对指针和接口进行了简单的包装。
    最次是用C++类对ActiveX控件的完全包装。
      

  7.   

    各位有用VARIANT的吗?我原来用Delphi时,大部分用它,我觉得它也挺方便的,当然,不考虑效率
      

  8.   

    还有一问题,  我用的是 c/c++
    虽然他调用api很方便,但现在觉得用它开发界面实在太麻烦了
    想用 Delphi  或者 vb 或者 c++builder请问那一种好些(只写界面, 内核用com)???thanks
      

  9.   

    TO newsoftboy(小林):
    你熟悉哪种就用那种啦!