Определение интерфейса для передачи byte [] и byte * между C # и C ++? - PullRequest
0 голосов
/ 01 сентября 2011

Учитывая следующий тестовый интерфейс (C #):

public interface ITest
{
    UInt32 Simple(UInt32 someArg);

    byte* Read(UInt32 count);
    void Write(byte* buf, UInt32 count);

    byte[] ReadArray(UInt32 count);
    void WriteArray(byte[] buf);
}

Могу ли я реализовать этот интерфейс в c ++ / cli?Я пробовал миллион разных способов;в настоящее время у меня есть это:

typedef unsigned __int32 uint32;
typedef unsigned char byte;

public ref class CTest : public ITest
{
  virtual uint32 Simple(uint32 someArg);

  virtual byte * Read(uint32 count);
  virtual void Write(byte * buf, uint32 count);

  virtual System::Array<byte>^ ReadArray(uint32 count);
  virtual void WriteArray(System::Array<byte>^ buf);
}

Компилятор VC2010 горько жалуется на все методы, кроме CTest :: Simple, утверждая, что я не реализовал интерфейс.

Может кто-нибудь показать мнемагия c ++ / cli для реализации интерфейса, который передает либо byte *, либо byte [] (предпочтительно оба)?Я нахожусь в конце моего ума ...

1 Ответ

1 голос
/ 01 сентября 2011

Компилируются следующие компоненты:

public ref class CTest : public ITest
{
public:
    virtual unsigned Simple(unsigned someArg) { return 0u; }

    virtual unsigned char* Read(unsigned count) { return nullptr; }
    virtual void Write(unsigned char* buf, unsigned count) { }

    virtual array<unsigned char>^ ReadArray(unsigned count) { return nullptr; }
    virtual void WriteArray(array<unsigned char>^ buf) { }
};

Ваша основная проблема заключается в том, что ваши CTest функции-члены являются частными и, следовательно, не могут реализовать интерфейс.Другие проблемы в основном связаны с использованием System::Array<>, а не array<> (что сокращенно от cli::array<>).

...