2011-09-01 347 views
0

考虑下面的测试接口(C#):定义一个接口在C#和C++之间传递byte []和byte *?

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方法::简单,声称我没有实现的接口。

有人可以让我看看C++/cli魔术来实现一个接口,它传递byte *还是byte [](最好是两者)?我在我束手无策......

回答

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<>的简称)有关。

+0

所以我已经正确地宣布为公开;我只是没有尝试编译我的例子。事实证明,我的问题的根源在于,当我试图解决这个问题时,我已经工作了14个小时,并且在我的实施课程的方法名称中存在拼写错误。 D'哦!无论如何,感谢您的快速反应...... –