在C /CLI中有一个MEMSET问题



我当前使用C /CLI来包装我在.lib文件中使用的几个类。而且我迫切需要在我的C /CLI中使用" memset"。这里有人知道如何在C /CLI代码中使用MEMSET?

我要在C /CLI代码中使用的C 代码:

memset(&DeviceInfo, 0, sizeof(FS_DEVICE_INFO));

这是我的C /CLI代码,当我尝试使用C 代码相同的MEMSET行时,我会在其中获得错误:

bool newIFSWDevice::GetDeviceInfo(PFS_DEVICE_INFO pDevInfo)
{
IFSDevice* pDeviceWheel = nullptr;
FS_DEVICE_INFO DeviceInfo;
int x = 0;
while (nullptr != (pDeviceWheel = newFSDeviceEnumerator::EnumerateInstance(x++)))
{
    memset(&DeviceInfo, 0, sizeof(FS_DEVICE_INFO)); //error line
    pDeviceWheel->GetDeviceInfo(&DeviceInfo);
    if (0 == wcscmp(DeviceInfo.Name, FS_DEVICE_WHEEL_PORSCHE_NAME)
        break; 

我尝试使用一个用于循环的...

for (int i = 0; i <= sizeof(FS_DEVICE_INFO); i++)
    FS_DEVICE_INFO[i] = 0;

,但它仍然给我一个错误"表达必须具有恒定值"。帮助您将不胜感激!:(

如注释中所述,您缺少标题文件#include <string.h>。请参阅文档。


也值得注意的是,您的for循环进行清除有几个问题:

for (int i = 0; i <= sizeof(FS_DEVICE_INFO); i++)
    FS_DEVICE_INFO[i] = 0;
  • sizeof(FS_DEVICE_INFO)在字节中为您提供了该结构的大小,但是fs_device_info [i]索引索引到一个结构的数组中: [1]将是数组中的第二个结构,不是第二个字节!您需要将指针投放到char或类似的东西。
  • i <= sizeof(FS_DEVICE_INFO)<=不正确。如果结构大于10个字节,则最终会在字节0到10上进行操作,即总数为11个字节,踩在结构之后发生的任何事情上。
  • FS_DEVICE_INFO[i]FS_DEVICE_INFO是类的名称,您的本地变量为DeviceInfo,因此应为DeviceInfo[i]。这就是为什么您会遇到expression must have a constant value错误。

相关内容

最新更新