C ++访问整个dll中的映射文件

时间:2013-04-03 12:59:15

标签: c++ global-variables

我想映射一个文件并在整个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需要是指向已完成对象类型的指针”。

有人可以告诉我哪里出错了或者如何修理它?

2 个答案:

答案 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);