定义一个接口来传递C#和C ++之间的byte []和byte *?

时间:2011-09-01 02:06:17

标签: interface c++-cli argument-passing

给出以下测试界面(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 个答案:

答案 0 :(得分:1)

以下编译:

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<>的缩写)有关。