我很抱歉听起来很愚蠢的问题:)
我有这样的代码:
namespace Messages{
/// @brief Interface to support building a message during decoding.
class ValueMessageBuilder : public Common::Logger
....
由于这个错误,我不能在我的c#项目中使用ValueMessageBuilder
:
Cannot access internal struct 'ValueMessageBuilder' here.
所以我试图将其公开并重新编译dll:
public class ValueMessageBuilder : public Common::Logger
但编译失败并出现此类错误Error C3381: 'QuickFAST::Messages::ValueMessageBuilder' : assembly access specifiers are only available in code compiled with a /clr option F:\Oleg\quickfast_1_4_0_my\src\Messages\ValueMessageBuilder.h 17 1 QuickFAST
所以问题是如何将内部ValueMessageBuilder
结构转换为公共结构?
答案 0 :(得分:0)
由于错误声明您的代码必须使用/ clr选项编译(项目属性|常规|公共语言运行时支持)。之后你的项目将成为c ++ / clr(托管c ++)。 另外我认为该类应该以 ref 关键字开头,以便在c#中可见。
答案 1 :(得分:0)
对于可从C#使用的类,它必须是具有.NET元数据的托管类型。
使用ref class
或value class
。
请注意,对象不能同时包含托管类型和本机类类型。但是,本机类可以保存托管实例的句柄(使用gcroot
),托管类型可以保存指向本机对象(My smart pointer, posted on codereview, may help with lifetime management)的指针。