我有一个COM对象。 在主课堂上,我做了两个公众成员。C++访问其他类公共成员
public:
HANDLE m_hVoiceData;
void* m_pVoiceData;
它们用于映射文件。 我在COM对象的实例化处映射文件。
COM对象的主类有一个私有类。 从这个私有类我想访问这些公共成员:
这是我要访问的映射文件:
memcpy(nEncodedBytes,& CTTSEngObj::m_pVoiceData[iFirstByteToRead], iLenCompressedBytes);
但是编译器不喜欢这个。 它说“非静态成员引用必须是相对于某个对象”。
任何人都可以请告诉我如何正确地做到这一点? 我知道在主类中公开一个成员,但我需要这样做,因为私有类(如上所述)也具有私有类,并且它们都需要该成员来访问某个映射文件。
这是我映射文件:
STDMETHODIMP CTTSEngObj::SetObjectToken(ISpObjectToken * pToken)
{
HRESULT hr = SpGenericSetObjectToken(pToken, m_cpToken);
//--- Map the voice data so it will be shared among all instances
// Note: This is a good example of how to memory map and share
// your voice data across instances.
TCHAR szFileName[MAX_PATH+1];
GetModuleFileName(_Module.m_hInst, szFileName, MAX_PATH+1);
StrCpy(PathFindFileName(szFileName), _T("data.dat"));
if(SUCCEEDED(hr))
{
USES_CONVERSION;//needed to make T2W work
hr = MapFile(T2W(szFileName), &m_hVoiceData, &m_pVoiceData);
}
然后
STDMETHODIMP CTTSEngObj::Speak(DWORD dwSpeakFlags,
REFGUID rguidFormatId,
const WAVEFORMATEX * pWaveFormatEx,
const SPVTEXTFRAG* pTextFragList,
ISpTTSEngineSite* pOutputSite)
{
HRESULT hr = S_OK;
//--- Check args
if(SP_IS_BAD_INTERFACE_PTR(pOutputSite) ||
SP_IS_BAD_READ_PTR(pTextFragList) )
{
hr = E_INVALIDARG;
return hr;
}
m_App.DoSomething();
M_APP是一类。 它是COM对象主类的私有成员。
这个类有子类,例如: CTTSEngObj.m_App.SomeSmallClass
而且SomeSmallClass需要访问映射文件。
请再显示一些代码 –
“COM对象的主类有一个私有类”。这到底是什么意思呢?你有一个嵌套类? – jogojapan
那么这不是_real_ C++ ...:P –