0

我想映射一个文件并在整个 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);

....编译器告诉我“表达式需要是指向已完成对象类型的指针”。

有人可以告诉我哪里出错或如何解决吗?

4

2 回答 2

3

您不能索引到void *. 相反,您将需要使用char *m_pVoiceData( 而m_pVoiceData = reinterpret_cast<char *>(stuff);不是m_pVoiceData = stuff;您的数据被映射的位置。

于 2013-04-03T13:04:18.077 回答
1

由于m_pVoiceData已经是一个 void 指针,因此强制转换(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);
于 2013-04-03T14:07:58.703 回答