描述:
环境说明:VC的ATL COM AppWizard向导生成,插入的是Simple Objects,
实现类:
// abc.h : Declaration of the Cabc
#ifndef __ABC_H_
#define __ABC_H_
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// Cabc
class ATL_NO_VTABLE Cabc :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<Cabc, &CLSID_abc>,
public IDispatchImpl<Iabc, &IID_Iabc, &LIBID_LINSHILib>
{
public:
Cabc()
{
i = 1;
}
DECLARE_REGISTRY_RESOURCEID(IDR_ABC)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(Cabc)
COM_INTERFACE_ENTRY(Iabc)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// Iabc
public:
STDMETHOD(snd)(/*[in]*/ BSTR msg);
STDMETHOD(con)(/*[in]*/ BSTR ser);
private:
int i;
};
#endif //__ABC_H_
//////////////////////////////////////////////////////////////////////////
// abc.cpp : Implementation of Cabc
#include "stdafx.h"
#include "Linshi.h"
#include "abc.h"
#include <comdef.h>
/////////////////////////////////////////////////////////////////////////////
// Cabc
STDMETHODIMP Cabc::con(BSTR ser)
{
i = 10;
return S_OK;
}
STDMETHODIMP Cabc::snd(BSTR msg)
{
int a = i;
return S_OK;
}
问题所在:我先调用con方法,得到i的值为10,当调用snd时,a和i的值为1(i被初始为1的),为什么?怎样解决这个问题?
解决方案1:
这样写肯定没错呀
我以前刚写碰到过这种问题,不是ATL写COM的错,是我调用时出的错,希望对你有帮助。
Private Sub Command1_Click()
Dim COMObject As new MyComLib.FTPConnect
COMObject.connectFTP "61.186.250.63",21
Set COMObject = Nothing
End Sub
Private Sub Command9_Click()
Dim COMObject As new MyComLib.FTPConnect
COMObject.sendFTP "GET 'd:\zxf\abc.exe' 'e:\abc.exe'"
Set COMObject = Nothing
End Sub
连接时正确,发送指令就错,后来发现是因为操作两个方法之前都用了
Dim COMObject As new MyComLib.FTPConnect,分别创建了新的对象,如果把第二方法的
Dim COMObject As new MyComLib.FTPConnect去掉就正确了(第一方法中的Set COMObject = Nothing要删除),你再仔细查看一下。