然而,我正在 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/