解决方案 »

  1.   

    重新用MIDL编译,或者在客户端使用#import指令导入.tlb类型库亦可。
      

  2.   

    请问如何重新用MIDL编译?我用的是VC6.0
      

  3.   

    在你的IDL文件上单击右键就可以看到了
      

  4.   

    titilima(李马)(titilima.yeah.net) 能否详细些?我将tlb类型库拷贝到工程下,这样写
    #import "SimpleTest.tlb"
    void CTestAtlDlg::OnTestAtl() 
    {
    HRESULT hr;   
    IMyAltTest* pIntf = NULL;
    hr = CoCreateInstance(CLSID_MyAltTest, NULL, CLSCTX_SERVER , 
    IID_IMyAltTest, (void **)& pIntf);
    if(SUCCEEDED(hr))
    {
    pIntf->Wellcome();
    pIntf->Release();

    }

    }
    报错为
    IMyAltTest' : undeclared identifier
      

  5.   

    看看tlb有namespace没有?如果有的话就在#import后面加入相应的
    using namespace 你的命名空间
      

  6.   

    如果这个ATL是你自己写的,你可以在IDL文件上单击右键,选择settings,然后设置输出的.h和_i.c文件名,然后再用MIDL编译这个文件就会生成相应的文件了。
      

  7.   

    我用atl 建立了一个com,是支持mfc的dll,其中一个接口函数显示了对话框
    STDMETHODIMP CMyAltTest::Wellcome()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState()) MessageBox(NULL,_T("how are you"),_T("hello"),MB_OK);
    return S_OK;
    }
    客户端调用这个函数的时候,这样做
    #import "SimpleTest.tlb"
    #include "SimpleTest.h"
    #include "SimpleTest_i.c"
    HRESULT hr;   
    IMyAltTest* pIntf = NULL;
    hr = CoCreateInstance(CLSID_MyAltTest, NULL, CLSCTX_SERVER , 
    IID_IMyAltTest, (void **)& pIntf);
    if(SUCCEEDED(hr))
    {
    pIntf->Wellcome();
    pIntf->Release();
    }
    却没有弹出消息框为何???
      

  8.   

    CLSCTX_SERVER --> CLSCTX_INPROC_SERVER