cpp部分内容:
STDMETHODIMP CLog::get_type(long *pVal)
{
// TODO: Add your implementation code here
*pVal = m_type;

return S_OK;
}STDMETHODIMP CLog::put_type(long newVal)
{
// TODO: Add your implementation code here
m_type = newVal; return S_OK;
}--------------------------------------------------------
idl:
interface ILog : IDispatch
{
[id(1), helpstring("method Test")] HRESULT Test([out, retval]long *pVal);
[propget, id(2), helpstring("property type")] HRESULT type([out, retval] long *pVal);
[propput, id(2), helpstring("property type")] HRESULT type([in] long newVal); };------------------------------------------
测试程序: ILog  log; long test = 0; log.SetType(1000); test = log.GetType();
---------------------
说明:   编译通过,就是test无法赋值.
  
   怎么回事?   谢谢,解决后马上给分!

解决方案 »

  1.   

    ILog  log; long test = 0; log.SetType(1000); test = log.GetType();
    不是这样用的。 //IID_IGetNumber
    this->UpdateData();
    ::CoInitialize( NULL );

    IGetNumber *pGN = NULL;
    CLSID clsid = CLSID_GetNumber;
    HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER,
    IID_IGetNumber, (void **)&pGN);
    if(FAILED(hr)) 
    {
    AfxMessageBox("生成接口出错,可能没有初使化com!");
    ::CoUninitialize();
    return;
    }
    CComBSTR str = m_value;
    long ret = 0;
    pGN->GetUserCount(str,&ret);
    CString str2;
    str2.Format("the res %d",ret);
    AfxMessageBox(str2);
    ::CoUninitialize();
      

  2.   

    "ILog  log;log.SetType(1000);"????你是这么调用方法的?难怪会错误!
      

  3.   

    我就是从new project->ATL Com AppWizard 中建立的一个简单的工程,然后添加一个ATL Obj ,就是ILog,再添加一个Propert,type。就这么简单。在测试程序中导入*.tlb文件,就把接口导入了。而且::CoInitialize( NULL )都不要用的,MFC编译也没有错误,就是结果不对。这样做不可以吗?
      

  4.   

    if(!AfxOleInit())
    AfxMessageBox("WRONG!");;

    HRESULT hr;
             IPDFVw *ppvPDFVw = NULL;//对应clsid
    ICreateRTF *ppvaaa = NULL;//对应iid
    HRESULT l = NULL;
    hr=CoCreateInstance(CLSID_PDFVw,NULL,CLSCTX_LOCAL_SERVER ,IID_IPDFVw,(void**)&ppvPDFVw);
    if(SUCCEEDED(hr))
    {

    l = ppvPDFVw->SomeMethod();
    ppvPDFVw->Release();
    }
    else
    AfxMessageBox("WRONG!");
      

  5.   

    记得要加com头文件
    #include "MyCom_i.h"
    #include "MyCom_i.c"
      

  6.   

    解决了,是这样的:
    COleException err;
    log=NULL;
    log.CreateDispatch(TEXT("LogCom.Log"),&err);
    if(!log)
    {
     err.ReportError();
     return ;
    } long test = 0;
    log.SetType(1000);
    test = log.GetType();
    ==============
    谢谢了,送分给有功人员!
      

  7.   

    ::CoInitialize( NULL )还是要的。在APP的初始化中。
      

  8.   

    你上面的id怎么有两个2?
    ============
    因为添加的是属性,选择了put和get两个属性,所以id都是2,成对出现的。
    这是我猜的,总之现在只会使用ATL,对其原理不是太清楚。