写好的ATL控件,如何在VC中调用,当然了,只能用他一个DLL文件,也就是说当你拿到一个人家写好的ATL控件后,只有一个DLL,你在ASP中很容易调用,可是在VC调用中,控制台程序如何写, 在MFC中又如何调用,在DELPHI在又如何写,和一般的控件好象不一样呀,,唉,前题是只有一个DLL,用REGSVR32 普通注册成ACTIVEX控件后如何用??????这问题困了我很久了,那位高手能给个例子!

解决方案 »

  1.   

    控制台一般用智能指针#import "asdf.dll" 查关节字 智能型指针+ATL。不过是用COM方式调用的,你写的是控件就需要一个OLE CONTAINER.就要用图形界面了。
    图形界面推荐你用WTL7,跟ATL关系最密切,我也不太会MFC.
      

  2.   

    /////////////////////////////////////////////////////////////////////
    //Use WSH
    /////////////////////////////////////////////////////////////////////
    #import "WSHom.Ocx" named_guids
    using namespace  IWshRuntimeLibrary;
    void main()
    {
    CoInitialize(NULL);
    IWshShell *pShell;
    HRESULT hr=CoCreateInstance(__uuidof(IWshShell_Class), NULL,CLSCTX_INPROC, IID_IWshShell,  (void **)&pShell);
        if(hr!=S_OK)
        {
            MessageBox(0," CoCreateInstance failed","error",MB_OK);
            return;
        }
        VARIANT varTime,varTitle,varType;
        varTime.vt=VT_I4;
        varTime.intVal=10;
        int nButton;
        BSTR bstrText;
    VariantInit(&varTitle);
    varTitle.vt = VT_ERROR;
    varTitle.scode = (long)DISP_E_PARAMNOTFOUND;
    VariantInit(&varType);
    varType.vt = VT_ERROR;
    varType.scode = (long)DISP_E_PARAMNOTFOUND;
        bstrText=SysAllocString(L"hello");
        //ScopeGuard sg=MakeObjGuard(*pShell,&IWshShell::Release);
        pShell->Popup(bstrText,&varTime,&varTitle,&varType);
        //sg.Dismiss();
        pShell->Release();
        SysFreeString(bstrText);
    CoUninitialize();
    }
      

  3.   

    #include <iostream>
    #import "scrrun.dll" raw_interfaces_only 
    int main()
    {
    CoInitialize(NULL);
    {
    try
    {
    Scripting::IFileSystem3Ptr fs;
    fs.CreateInstance(__uuidof(Scripting::FileSystemObject));
    Scripting::IFolderPtr folder;
    fs->GetFolder(_bstr_t("c:\\temp"),&folder);
    _variant_t vsize;folder->get_Size(&vsize);
    std::cout<<"c:\\temp size:"<<(long)vsize<<" bytes"<<std::endl;
    }
    catch(_com_error &e)
    {
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    std::cout<<"Get directory size via FileSystemObject, by masterz"<<std::endl;
    std::cout<<"COM error occurred,source:"<<(LPCTSTR)bstrSource<<std::endl;
    std::cout<<"Description:"<<(LPCTSTR)bstrDescription<<std::endl;
    }
    }
    CoUninitialize();
    return 0;
    }