/////声明
// IAccount
public:
STDMETHOD(GetInt)(/*[out,retval]*/long *i);
long i;
////定义
STDMETHODIMP CAccount::GetInt(long *i)
{
// TODO: Add your implementation code here
*i=100; return S_OK;
}
//////使用
IAccount m_acc;
m_s1=m_acc.GetInt();
///////////////结果不对//////////////////
请指点。

解决方案 »

  1.   

    结果应是声明为
    long* m_s1
    //////使用
    IAccount m_acc;
    HRESULT ret=m_acc.GetInt(m_s1);
      

  2.   

    不是这样的。程序编译通过了的。因为我是用From Type Lib添加的类来进行调用的。
      

  3.   

    COM接口应该是通过指针方式调用的,通常的步骤是使用CoCreateInstance初始化接口指针并创建COM coclass对象,然后通过指针调用:
    IAccount *p;
    CoCreateInstance(__uuidof(CAccount), NULL, CLSCTX_INPROC_SERVER, __uuidof(IAccount), (LPVOID *)&p);
    long l;
    p->GetInt(&l);
    p->Release();
      

  4.   

    你的意思是说我的COM客户有问题是吧。
      

  5.   

    我这样做了
             //int m_s1
             //IAccount m_acc;
    if (m_acc.CreateDispatch("Test.Account.1") != 0)
    {
    m_s1=m_acc.GetInt();
    m_acc.ReleaseDispatch();
    }
    //////结果是-859045788
    /////本来应当是100的啊
      

  6.   

    //////使用
    IAccount m_acc;
             long m_sl = 0;
    m_acc.GetInt(&m_sl);
      

  7.   

    com调用是使用指针的,你要CoCreateInstance初始化接口指针,然后使用其方法
      

  8.   

    用Type Lib生成的类是不支持emory_xj(青蛙)的做法的,我是不是先把COM那里改成STDMETHOD(GetInt)(/*[out,retval]*/long *i);
    -----------------------------------------------
    STDMETHOD(GetInt)(/*[out]*/long *i);
      

  9.   

    不行啦……编译都通不过了。
    没想到用COM做这么简单的事情都如此之难,ai
    BTW:我是用ATL做的
      

  10.   

    你是
    >
    >我这样做了
    >         //int m_s1
    >         //IAccount m_acc;
    > if (m_acc.CreateDispatch("Test.Account.1") != 0)
    > {
    > m_s1=m_acc.GetInt();
    > m_acc.ReleaseDispatch();
    > }
    >//////结果是-859045788
    >/////本来应当是100的啊
    基本是对的!1.你调用过CoInitialize(NULL)或AfxOleInit()吗?
    2.判断条件最好改成:
      
    HRESULT hr=m_acc.CreateDispatch("Test.Account.1");
    if(SUCCEEDED(hr))
    {
    m_s1=m_acc.GetInt();
             m_acc.ReleaseDispatch();
    }
      

  11.   

    大家想来都是高手啊。我觉得这个问题好基本的。
    我调用过AfxOleInit()的,这个你放心,我相信如果没有初始化COM库,CreateDispatch一定会失败的。