是不是引入类型库才会有只能指针的定义,
我引人dll,编译后在。tlh文件中找不到
智能指针的定义,该如何去做?

解决方案 »

  1.   

    >> 是不是引入类型库才会有只能指针的定义,不是。。
    你是怎么定义智能指针的??代码贴出来看看。。
      

  2.   

    在stdafx.h中用#import ..\..\PeoPle.dll ,VB组件中的dll是PeoPle.dll,拷贝到我的工程目录下,并已注册,然后编译后产生tlh和tli文件,在tlh文件中有智能指针的宏定义,是系统生成的
    如下:
    _COM_SMARTPTR_TYPEDEF(_NameSetting, __uuidof(_NameSetting));
    //
    // Type library items
    //
    除此之外,再也没有关于智能指针的内容了
    我以为系统自动编译生成智能指针_NameSettingPtr,并直接用了该指针,编译时没有出现错误,但执行时,调不出来,这是怎么回事,智能指针是自己定义的吗,
      

  3.   

    如果你是从IDispatch继承下来的,可以直接用_NameSettingPtr这种形式使用智能指针,按照这种方式使用智能指针很简单,按照以下几个步骤来。1 导入类型库 #import ..\..\PeoPle.dll 
    2 初始化组件库 调用::CoInitialize(NULL);
    3 智能指针之前要使用CreateInstance创建组件实例
             IRecDataPtr spData;
    HRESULT hr = spData.CreateInstance(__uuidof(RecData));
    if(FAILED(hr))
    {
    _com_issue_error(hr);
    return;
    } 4 以后就可以使用该智能指针了
    try
    {
    spData->UpdateCurUse(nOldID,nNowID);
    }
    catch(_com_error e)
    {
    AfxMessageBox(e.Description());
    return;
    }
      

  4.   

    现在创建组件没有问题了,问题出现在调用上,调用时try和catch块中出现异常,为应用程序错误,那么VB函数在定义时和在VC中使用时的行参是不是为不同类型,该怎样处理呢
    例如:
    VB中定义NameString(Name As String)
    在VC中变成NameString(BSTR* Name)
    我使用强制转换m_nameSetting((BSTR*)"hello");
    但是出现异常
    该如何处理呢?
      

  5.   

    VB中定义NameString(Name As String)
    在VC中变成NameString(BSTR* Name)
    我使用强制转换m_nameSetting((BSTR*)"hello");应该写为
    BSTR t;
    t=SysAllocString(L"hello");
    m_nameSetting.YourMethod(&t);
      

  6.   

    VB中定义NameString(Name As String)
    在VC中变成NameString(BSTR* Name)
    我使用强制转换m_nameSetting((BSTR*)"hello");应该写为
    BSTR t;
    t=SysAllocString(L"hello");
    m_nameSetting.YourMethod(&t);
    ...
    SysFreeString(t);
      

  7.   

    >>那么VB函数在定义时和在VC中使用时的行参是不是为不同类型,该怎样处理呢使用com的类型VARIANT>>我使用强制转换m_nameSetting((BSTR*)"hello");不能这样做强制转换,在vc中这样传递参数:CString str = "hello";
    m_nameSetting(_bstr_t(str));或者按楼上的那种方式也可以来调用