我想映射一个文件并在整个dll中使用它。 dll由几个相互链接的类组成。
例如startclass.someclass.someotherclass
someotherclass也应该能够访问映射文件。 我在“startclass”中映射文件。
要从“someotherclass”中访问映射文件,我在项目中添加了一个名为“global.cpp”的新类。
在“global.h”中我已说过
HANDLE m_hVoiceData;
void* m_pVoiceData;
现在在“someotherclass”中我想访问映射文件。 所以我说了
#include "global.h"
但是,当我现在尝试在“someotherclass”中执行以下操作时......
memcpy(nEncodedBytes,(void*)m_pVoiceData[iFirstByteToRead], iLenCompressedBytes);
....编译器告诉我“Expression需要是指向已完成对象类型的指针”。
有人可以告诉我哪里出错了或者如何修理它?
答案 0 :(得分:3)
您无法索引void *
。相反,您需要使用char *m_pVoiceData
(和m_pVoiceData = reinterpret_cast<char *>(stuff);
而不是m_pVoiceData = stuff;
来映射您的数据。
答案 1 :(得分:1)
由于m_pVoiceData
已经是一个空指针,(void*)m_pVoiceData[iFirstByteToRead]
中的强制转换是多余的。但是,正如Mats Petersson所解释的那样,您无法索引到void*
。
您可以将m_pVoiceData
更改为char *,然后使用
memcpy(nEncodedBytes,(void*)(&m_pVoiceData[iFirstByteToRead]),iLenCompressedBytes) // the cast to void is now required
或者,如果您无法更改此标题,请使用
memcpy(nEncodedBytes, &((char*)(pVoiceData))[iFirstByteToRead],iLenCompressedBytes);