将指向DWORD的指针从c#传递到c++;动态链接库 我试图从C++中从一个C控制台应用程序中调用一个DLL来调用一个非托管函数。我已经为几个简单的方法调用做到了这一点,但是其中一个函数接受了一个参数void*,我不确定要传递什么才能让它工作

将指向DWORD的指针从c#传递到c++;动态链接库 我试图从C++中从一个C控制台应用程序中调用一个DLL来调用一个非托管函数。我已经为几个简单的方法调用做到了这一点,但是其中一个函数接受了一个参数void*,我不确定要传递什么才能让它工作,c#,c++,extern,C#,C++,Extern,C++方法签名 BOOL, SetData, (INT iDevice, BYTE iCmd, VOID* pData, DWORD nBytes) [DllImport("NvUSB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)] public static unsafe extern bool SetData(int iDevice, byte iCmd, void*

C++方法签名

BOOL,   SetData,      (INT iDevice, BYTE iCmd, VOID* pData, DWORD nBytes)
[DllImport("NvUSB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static unsafe extern bool SetData(int iDevice, byte iCmd, void* pData, uint nBytes);
C#方法签名

BOOL,   SetData,      (INT iDevice, BYTE iCmd, VOID* pData, DWORD nBytes)
[DllImport("NvUSB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static unsafe extern bool SetData(int iDevice, byte iCmd, void* pData, uint nBytes);

<强>工作C++调用< /强>

DWORD pDatatoHi[] = { 'R','E','B','O','O','T' };
SetData(0, 0, pDatatoHi, sizeof(pDatatoHi))
不工作C#


我试图从非托管DLL调用的方法应该重新启动USB设备,当该函数被调用为根据上面的设备重新启动的C++示例。当我调用上面的C#版本时,代码会执行并返回true,但是设备不会重新启动。我怀疑这是由于我在调用

SetData(地址,0,cmd,6)
时传递
pData
参数的方式造成的。字节数是24,而不是6。6是项目的数量,而不是数组的大小,这是你在C++中给出的例子,

< p>当你调用<代码> SEDATA(地址,0,CMD,6)< /C> >字节数是24,而不是6。6是项目的数量,而不是数组的大小,这就是你在C++例子中所传递的内容:“不工作”和“它不起作用”。这不是一个可接受的问题陈述。当您调用
SetData(地址,0,cmd,6)字节数是24,而不是6。6是项目的数量,而不是数组的大小,这是你在C++示例中所传递的内容。“我想给我的问题增加一些细节,为不清楚而道歉。”肖恩,你是超级巨星!这是完美的,如果你把它作为一个答案,我会接受它:“我一直试图让这个工作一段时间,甚至没有考虑到!”山姆-谢谢山姆。我加上它作为回答。你说的“不工作”和“就是不工作”到底是什么意思?这不是一个可接受的问题陈述。当您调用
SetData(地址,0,cmd,6)字节数是24,而不是6。6是项目的数量,而不是数组的大小,这是你在C++示例中所传递的内容。“我想给我的问题增加一些细节,为不清楚而道歉。”肖恩,你是超级巨星!这是完美的,如果你把它作为一个答案,我会接受它:“我一直试图让这个工作一段时间,甚至没有考虑到!”山姆-谢谢山姆。我把它作为一个答案加上去了。