如何申报公共课

时间:2012-04-29 14:34:13

标签: .net c++-cli

我很抱歉听起来很愚蠢的问题:)

我有这样的代码:

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 QuickF‌​AST

所以问题是如何将内部ValueMessageBuilder结构转换为公共结构?

2 个答案:

答案 0 :(得分:0)

由于错误声明您的代码必须使用/ clr选项编译(项目属性|常规|公共语言运行时支持)。之后你的项目将成为c ++ / clr(托管c ++)。 另外我认为该类应该以 ref 关键字开头,以便在c#中可见。

答案 1 :(得分:0)

对于可从C#使用的类,它必须是具有.NET元数据的托管类型。

使用ref classvalue class

请注意,对象不能同时包含托管类型和本机类类型。但是,本机类可以保存托管实例的句柄(使用gcroot),托管类型可以保存指向本机对象(My smart pointer, posted on codereview, may help with lifetime management)的指针。