在C ++ / CLI

时间:2017-05-04 13:19:30

标签: c++-cli

我是一个新手,目前正在使用c ++ / cli来包装我在.lib文件中使用过的几个类。我迫切需要使用" memset"在我的c ++ / cli中。这里的任何人都知道如何在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循环......

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

但它仍然给我一个错误&#34;表达式必须有一个恒定值&#34;。非常感谢帮助! :)

1 个答案:

答案 0 :(得分:0)

如评论中所述,您错过了标题文件#include <string.h>。请参阅documentation

还值得注意的是,执行清算的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错误的原因。