在托管C+;中声明可从C#使用的结构+; 我有一个场景,C语言库正在使用混合模式C++库。用例如下所示: < p > 1)C代码从库(托管C++)初始化侦听器,该库从原生C++初始化监听器。 < P > 2)本机代码接收消息并解析它,然后通过IJW代码传递给托管C++。 3)托管C++调用带有消息< /p>的C代码中的委托

在托管C+;中声明可从C#使用的结构+; 我有一个场景,C语言库正在使用混合模式C++库。用例如下所示: < p > 1)C代码从库(托管C++)初始化侦听器,该库从原生C++初始化监听器。 < P > 2)本机代码接收消息并解析它,然后通过IJW代码传递给托管C++。 3)托管C++调用带有消息< /p>的C代码中的委托,c#,c++-cli,C#,C++ Cli,这一切都很好,除了最后一部分——实际上包括消息。C代码不能访问托管C++中定义的数据类型。当您导航到结构的定义时,它如下所示: namespace NativeWrapper { [CLSCompliant(false)] [NativeCppClass] [UnsafeValueType] public struct MyDataType { } } 正如你所看到的,它谴责它不安全,并清除了字段。我看到了这个问题的解决方案,其中第三个库,在C++中声明了一

这一切都很好,除了最后一部分——实际上包括消息。C代码不能访问托管C++中定义的数据类型。当您导航到结构的定义时,它如下所示:

namespace NativeWrapper
{
   [CLSCompliant(false)]
   [NativeCppClass]
   [UnsafeValueType]
   public struct MyDataType
   {
   }
}
正如你所看到的,它谴责它不安全,并清除了字段。我看到了这个问题的解决方案,其中第三个库,在C++中声明了一个结构,C和托管C++都使用它。我想这是可行的,但我正试图避免为一个小文件创建第三个库……这个组件是大型系统的一部分,我希望将添加到其中的DLL数量保持在尽可能小的范围内


这样,问题是,有没有办法定义托管代码C++中的C代码可以引用的结构?我知道如何定义ref类,这就是我的侦听器的设置方式,但我希望它是一个结构。

您是否使用
value类
?相关:(换句话说,您需要
ref
作为引用类型,而
value
作为值类型。C++/CLI中的
class
struct
不会影响.Net“类型”.我不知道价值等级是一件事…它完成了任务。太简单了。谢谢!