给出以下测试界面(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 [](最好是两者)的接口吗?我的智慧结束了......
答案 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<>
的缩写)有关。