c# - 用 C++ CLI 编写的 DOTNET 包装器 native 传递结构的最佳方式?

标签 c# c++-cli native wrapper

然而,我正在 C++ CLI 中为我们的应用程序编写一个包装器,以提供一些新部分(用 C# 编写)保存并轻松访问旧的 native 库。因此我需要将一些结构从 C# 传递到 C++。这些结构在 C++ Cli (dotnet) 和 C++ 中定义。

示例:

\\C+++
typedef struct
{                                                           
INFO16   jahr   ;
INFO8    monat  ;
INFO8    tag    ;
INFO8    stunde ;
INFO8    minute ;
}
SDATUM;

\\c++ cli
[StructLayout(LayoutKind::Explicit)]
public value struct SDATUM
{
public:
  [FieldOffset(0)]
  UInt16 jahr;
  [FieldOffset(2)]
  Byte monat;
  [FieldOffset(3)]
  Byte tag;
  [FieldOffset(4)]
  Byte stunde;
  [FieldOffset(5)]
  Byte minute;
};

现在我在 C++ cli 中提供了一些函数,它们以按值传递、按引用传递 (sdatum%) 和指针 sdatum* 的形式接受这种类型作为 dotnet 类型 SDATUM,就像相应的 native 函数一样。我需要什么来转换/转换这些结构?

最佳答案

我不会做任何选角。相反,编写一个包含 SDATUM 的 ref 类。公开设置底层 SDATUM 的方法和属性。从 C# 端使用此 ref 类(或者更好的是,创建该类实现的接口(interface)并让 C# 端使用该接口(interface))。在 C++/CLI 中,您可以访问类的 native 版本并根据需要将其传递给 native 方法。

关于c# - 用 C++ CLI 编写的 DOTNET 包装器 native 传递结构的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5375370/

相关文章:

c# - 从 C# 服务使用 Graph API 获取日历计划

c# - 如何将 IntPtr 转换为 native C++ 对象

c++ - 如何解决错误 : Cannot convert from 'OSamp::Weapon' to 'OSamp::Weapon' in C++ CLR

java - jtype (JNI) 和 C/C++ 的类型有什么区别?

C# ByteArray 到字符串的转换和返回

c# - 使用 Kinect 和 Unity 与头像交互

c# - C++/CLI Dll 与 C# 连接问题

c++ - 你如何制作linux GUI?

ios - 如何将适用于 iOS 的 Adob​​e AIR3 native 扩展链接到 iOS 框架?

c# - 使用 Linq 解析 XML 时,只会获取一个对象