将 C++ 类型转换为 C#
Translating c++ types to C#
如何"翻译"C++函数
LONG CALL_METHOD NET_SDK_Login(
char *sDVRIP,
WORD wDVRPort,
char *sUserName,
char *sPassword,
LPNET_SDK_DEVICEINFO lpDeviceInfo);
到 .Net (C#) 与 P/Invoke 一起使用?我试过
[DllImport("DVR_NET_SDK.dll", CallingConvention = CallingConvention.StdCall)]
public static extern int NET_SDK_Login(
[MarshalAs(UnmanagedType.LPStr)] string sDVRIP,
ushort wDVRPort,
[MarshalAs(UnmanagedType.LPStr)] string sUserName,
[MarshalAs(UnmanagedType.LPStr)] string sPassword,
out _net_sdk_deviceinfo devinfo);
但是没有运气。谁能帮忙?
问题中提出的翻译很好。问题在于您对结构的翻译。正如我在回答您之前的问题时所解释的那样,您没有正确翻译结构。您无法转换结构中的内联数组。
例如,在结构C++版本中,我们看到以下字段:
unsigned char deviceMAC[6];
你把它翻译为
byte deviceMAC;
这是一个明显的错误。我相信您意识到不可能将 6 字节的 MAC 地址放入一个字节中。
这需要像这样翻译:
[MarshalAs(UnmanagedType.ByValArray, SizeConst=6)]
public byte[] deviceMAC;
结构中的所有其他数组依此类推。
您可以编写一些 C++/CLI 包装器,这些包装器将允许从 C# 调用非托管代码 (C++) (托管)
C# => C++/CLI => C++
你可以看看这个问题和它的问题:C++/CLI:我为什么要使用它?
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将Windows产品类型转换为名称?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 事件系统:使用类型转换或联合进行继承
- 如何在参数中定义隐式类型转换的构造函数?
- 类模板实例化中的类型转换