【发布时间】:2014-06-27 01:00:02
【问题描述】:
我在非托管 C++ 中有这么简单的结构:
struct Cam
{
char ip[16];
char login[16];
char pass[16];
char name[16];
};
和 C# 编组结构:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct Cam
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string ip;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string login;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string pass;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string name;
}
当我通过函数将 C# struct 传递给 C++ lib 时
[DllImport("NVRLib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void AddCameraStruct(Cam cam);
...
Cam cam = new Cam();
cam.ip = "192.168.0.232";
cam.login = "admin";
cam.pass = "admin";
cam.name = "kekekeke";
AddCameraStruct(cam);
并在 C++ 中打印传递的值:
__declspec(dllexport) void AddCameraStruct(Camera cam)
{
printf(cam.ip);
printf("\n");
printf(cam.login);
printf("\n");
printf(cam.name);
printf("\n");
printf(cam.pass);
strcpy(camera[CAM_NUM].ip, cam.ip);
strcpy(camera[CAM_NUM].login, cam.login);
strcpy(camera[CAM_NUM].pass, cam.pass);
strcpy(camera[CAM_NUM].name, cam.name);
CAM_NUM++;
}
打印出来:
232
<EMPTY LINE>
192.168.0.232
n
我做错了什么?
【问题讨论】:
-
请添加 c++ 'Camera' 类
-
__declspec(dllexport) __cdecl void AddCameraStruct(Camera cam) -
@SaniHuttunen 如果您认为这可以解决问题,您应该将其发布为答案,而不是评论。 (我认为不会,但我可能会弄错。)
-
@SaniHuttunen 输入您所写的内容后出现错误“缺少显式类型”
-
@Lukas 我认为 Jossef Harush 的观点是您的
AddCameraStruct的参数类型为Camera,而不是Cam,并且您的问题中缺少Camera的定义。 @SaniHuttunen 够公平的。