2012-11-23 36 views
2

我試圖綁定一個罐子庫的MFA(JCIFS),但我被困在一些誤區,像這樣的:綁定罐圖書館

「Jcifs.Util.MD4」不實現繼承的抽象成員「Java.Security.MessageDigestSpi.EngineDigest()

經過一番研究,我發現這個有些話題,告訴編輯更改類的權限元數據,如:

<attr path="/api/package[@name='java.security']/class[@name='MessageDigestSpi']/method[@name='engineDigest']" name="visibility">public</attr> 

但錯誤沒有改變,仍然不會得到這個錯誤的含義。

有人嗎?

編輯:這是虛擬類的誰返回我的錯誤代碼:

public virtual byte[] EngineDigest() 
    { 
     if (id_engineDigest == IntPtr.Zero) 
      id_engineDigest = JNIEnv.GetMethodID (class_ref, "engineDigest", "()[B"); 

     if (GetType() == ThresholdType) 
      return (byte[]) JNIEnv.GetArray (JNIEnv.CallObjectMethod (Handle, id_engineDigest), JniHandleOwnership.TransferLocalRef, typeof (byte)); 
     else 
      return (byte[]) JNIEnv.GetArray (JNIEnv.CallNonvirtualObjectMethod (Handle, ThresholdClass, id_engineDigest), JniHandleOwnership.TransferLocalRef, typeof (byte)); 
    } 

而且我加入這一個新的文件:

partial class MD4 
{ 
    public override byte[] EngineDigest() 
    { 
     return null; 
    } 
} 

如果我這樣做,這個錯誤返回:

錯誤1類型'Jcifs.Util.MD4'已經使用相同的參數t定義了一個名爲'EngineDigest'的成員ypes

據我所知,EngineDigest方法已經存在,但類需要實現它。我該怎麼做?

完整的錯誤:錯誤195 'Jcifs.Util.MD4' 不實現繼承的抽象成員 'Java.Security.MessageDigestSpi.EngineDigest()'

編輯2:我試着使用xamarin站點中的OsmDroidBinding示例回覆該問題。我編輯了元文件,直到遇到類似的錯誤。我發現其中一條線路是這樣的一個:

<attr path="/api/package[@name='org.osmdroid.tileprovider']/class[@name='MapTileProviderBase.ScaleTileLooper']/method[@name='handleTile']" name="visibility">public</attr> 

,我得到這個錯誤: Error

然後我試圖把它添加到我的項目圖元文件(如上述),但錯誤依然存在:

<attr path="/api/package[@name='java.security']/class[@name='MessageDigestSpi']/method[@name='engineDigest']" name="visibility">public</attr> 

謝謝。

回答

2

它告訴你生成的類Jcifs.Util.MD4沒有實現繼承的抽象方法。抽象方法是必須被任何派生類覆蓋的方法。

下面的代碼正在改變基類的方法公開的可見性,這顯然不會解決問題。

<attr path="/api/package[@name='java.security']/class[@name='MessageDigestSpi']/method[@name='engineDigest']" name="visibility">public</attr> 

有幾種方法可以解決這個錯誤。也許最簡單的方法是將一個類文件添加到Java綁定庫中,並向其中添加以下代碼。

namespace Jcifs.Util 
{ 
    public partial class MD4 
    { 
     public override void EngineDigest() 
     { 

     } 
    } 
} 

注意您需要的EngineDigest()返回類型更改爲在基類中的抽象方法定義的返回類型。你沒有提到你問題中的返回類型,所以我做了void

+0

我缺少一些C#技能,所以我不能到任何地方。如果我添加了這個代碼VS返回我「...已經定義了一個名爲EngineDigest的成員具有相同的參數類型,我將編輯該問題以獲取更多信息 – Juliano

0

變化

公衆覆蓋的byte [] EngineDigest()

保護覆蓋的byte [] EngineDigest()