0

ばかげているように聞こえる質問をお詫びします:)

私はそのようなコード行を持っています:

namespace Messages{
/// @brief Interface to support building a message during decoding.
class ValueMessageBuilder : public Common::Logger
....

そしてValueMessageBuilder、このエラーのために私のc#プロジェクトから使用することはできません:

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構造をパブリックに変換する方法です。

4

2 に答える 2

0

クラスをC#から使用できるようにするには、クラスが.NETメタデータを持つマネージ型である必要があります。

ref classまたはを使用しますvalue class

オブジェクトには、管理対象クラスタイプとネイティブクラスタイプの両方を含めることはできないことに注意してください。ただし、ネイティブクラスはマネージドインスタンスへのハンドルを保持でき(use gcroot)、マネージドタイプはネイティブオブジェクトへのポインターを保持できます(コードレビューに投稿された私のスマートポインターは、ライフタイム管理に役立つ場合があります)。

于 2012-04-29T14:59:39.457 に答える
0

エラーが示すように、コードは /clr オプションでコンパイルする必要があります (プロジェクト プロパティ | 一般 | 共通言語ランタイム サポート)。その後、プロジェクトは c++/clr (マネージド c++) になります。また、クラスの前にrefキーワードを付けて、c# で表示する必要があると思います。

于 2012-04-29T14:51:56.707 に答える