描述:
接口中方法Add(BSTR key, VARIANT object), BSTR key 针对字符串可以满足, 菜鸟我必须要实现“key 能够传递自定义类的对象,VARIANT key 这样申明似乎解决不了”,给折磨好久了, 哭,各位高手, 请指点。感谢! 感谢!感谢!
这里给出我的例子。
project name : TestDictionary
// TestDictionary.cpp : Implementation of CTestDictionary
#include "stdafx.h"
#include "TestDictionary.h"
#include ".\testdictionary.h"
// CTestDictionary
STDMETHODIMP CTestDictionary::Add(BSTR key, VARIANT object)
{
// TODO: Add your implementation code here
wstring keystirng(key);
_map[keystirng] = object;
return S_OK;
}
STDMETHODIMP CTestDictionary::get_Items(BSTR key, VARIANT* pVal)
{
// TODO: Add your implementation code here
wstring keystirng(key);
*pVal = _map[keystirng];
return S_OK;
}
STDMETHODIMP CTestDictionary::put_Items(BSTR key, VARIANT newVal)
{
// TODO: Add your implementation code here
wstring keystirng(key);
_map[keystirng] = newVal;
return S_OK;
}
head source:
// TestDictionary.h : Declaration of the CTestDictionary
#pragma once
#include "resource.h" // main symbols
// ITestDictionary
[
object,
uuid("AB33763D-A604-42CF-9F86-4EA61D8B51EA"),
dual, helpstring("ITestDictionary Interface"),
pointer_default(unique)
]
__interface ITestDictionary : IDispatch
{
[id(1), helpstring("method Add")] HRESULT Add([in] BSTR key, [in] VARIANT object);
[propget, id(2), helpstring("property Items")] HRESULT Items([in] BSTR key, [out, retval] VARIANT* pVal);
[propput, id(2), helpstring("property Items")] HRESULT Items([in] BSTR key, [in] VARIANT newVal);
};
[
object,
uuid("{8FA3C023-1EF5-4b1b-91F7-41815B8A5294}"),
dual, helpstring("ITestEnumrator Interface"),
pointer_default(unique)
]
__interface ITestEnumrator : IDispatch
{
[id(1), helpstring("method Next")] HRESULT Next([out,retval] VARIANT* pObject);
};
// CTestDictionary
[
coclass,
threading("apartment"),
vi_progid("ComLib.TestDictionary"),
progid("ComLib.TestDictionary.1"),
version(1.0),
uuid("B610EB97-5CEC-451A-90D9-A13EED57C168"),
helpstring("TestDictionary Class")
]
class ATL_NO_VTABLE CTestDictionary :
public ITestDictionary,
public ITestEnumrator
{
public:
CTestDictionary()
{
}
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHOD(Add)(BSTR key, VARIANT object);
private:
map<wstring,VARIANT> _map;
map<wstring,VARIANT>::iterator _iter;
public:
STDMETHOD(get_Items)(BSTR key, VARIANT* pVal);
STDMETHOD(put_Items)(BSTR key, VARIANT newVal);
};
解决方案1:
他的意思是:
1。声明为VARIANT key
2。在VARIANT里保存要传递的接口指针
二楼的别吞吞吐吐,我也没有搞明白
解决方案3:在VARIANT里面打包对象的接口