本人买了一个DNS的组件,是用VB开发的,请问如何在VC下调用.在ASP中是直接注册组件就可以用的.但在VC下要怎么调用呢,请问高手,组件名:LQSL.DLL

解决方案 »

  1.   

    先regsvr32, 然后在project => add to project => components and control => 选已注册选你已加入的组件
      

  2.   

    ASP可以用,VC当然也可以啦。
    1、注册组件
    2、在菜单Project->Add to project->Components and Controls
      

  3.   

    不行呀,注册了,可是在Project->Add to project->Components and Controls,里面找不到我注册的组件呀
      

  4.   

    或者直接将控件放入到 WINDOWS/SYSTEM32 目录下再试试看
      

  5.   

    不是吧,在那里只能插入ocx的控件,而不能加入DLL组件的呀。
      

  6.   

    使用IDispatch接口中的Invoke来调用
      

  7.   

    HRESULT hr = NULL;
    IDispatch* pIDispatch = NULL;
    wchar_t progid[] = L"Component.Test"; //组件名
    CLSID clsid; 
    hr = ::CLSIDFromProgID(progid, &clsid);
    hr = ::CoInitialize(NULL);
    hr = ::CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pIDispatch);
    if (SUCCEEDED(hr))
    {
    DISPID dispid;
    OLECHAR* name = L"MethodName"; //调用的函数名
    hr = pIDispatch->GetIDsOfNames(IID_NULL, &name, 1, GetUserDefaultLCID(), &dispid);
    if (SUCCEEDED(hr))
    {
    UINT iError = -1;
    VARIANT rarg;
    ::VariantInit(&rarg);
    VARIANT var[1];
    ::VariantInit(&var[0]);
    var[0].vt = VT_I2;   //参数类型
    var[0].iVal = 700;   //参数值

    DISPPARAMS param;
    param.cArgs = 1;
    param.rgvarg = var;
    param.cNamedArgs = 0;
    param.rgdispidNamedArgs = NULL; hr = pIDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, &param, &rarg, NULL, &iError);
    if (SUCCEEDED(hr))
    {
    //调用成功
    }
    ::VariantClear(&rarg);
    ::VariantClear(&var[0]);
    }
    pIDispatch->Release();
    }