2012-11-23 3 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'유형이 'EngineDigest'라는 멤버를 이미 동일한 매개 변수 t로 정의합니다. ype

내가 이해 한 것으로부터, EngineDigest 메소드는 이미 존재하지만 클래스는 그것을 구현해야합니다. 내가 어떻게 그럴 수 있니?

전체 오류

: 오류 195 'Jcifs.Util.MD4는'상속 추상 멤버 'Java.Security.MessageDigestSpi.EngineDigest()'

편집이 구현하지 않습니다 나는에 시도했다 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가 상속 된 추상 메소드를 구현하지 않는다는 것을 알려줍니다. 추상 메서드는 파생 클래스에 의해 재정의되어야하는 메서드입니다.

아래 코드는 기본 클래스의 메서드의 공개 설정을 public으로 변경 한 것이므로 분명히 문제가 해결되지 않습니다.

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

이 오류를 해결할 수있는 방법에는 여러 가지가 있습니다. 가장 쉬운 방법은 Java Binding Library에 클래스 파일을 추가하고 다음 코드를 추가하는 것입니다.

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

     } 
    } 
} 

참고 당신은 기본 클래스의 추상 메소드에 대해 정의 된 반환 형식에 EngineDigest()의 반환 형식을 변경해야합니다. 귀하의 질문에 반환 유형을 언급하지 않았으므로 나는 그것을 void으로 만들었습니다.

+0

내가 몇 가지 C#을 능력을 결여하고있어, 그래서 난 할 수 없습니다 어디든지 가라. 이 코드를 추가하면 VS가 나를 반환합니다 "... 이미 동일한 매개 변수 유형으로 EngineDigest라는 멤버를 정의합니다. 자세한 내용은 질문을 편집합니다. – Juliano

0

변경

공공 재정의 바이트 [] engineDigest의()

으로

보호 오버라이드 바이트 [] engineDigest의()