2011-09-01 72 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'哦!無論如何,感謝您的快速反應...... –