我当前使用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
错误。