2

IKVM を使用して、Oracle の OIMClient ライブラリを dll に変換しました。Java を使用したくない、.NET を使用したいが、OIM for .NET の API がありません。

OIMを使用したことがある場合は、OIMClientオブジェクトを作成してから、ユーザーの検索、変更、作成に使用するUserMangerオブジェクトを作成します。

これがJavaコードです(テスト済みで動作します):

UserManager umgr = null;
umgr = oimClient.getService(UserManager.class);

不明な場合、これは getService メソッドです。

public virtual object getService(Java.Lang.Class serviceClass);

.net では、interface.class を使用する方法が見つかりません。- C# の UserManager オブジェクトには .class が存在しません。- Java クラスに変換しようとすると、「'oracle.iam.identity.usermgmt.api.UserManager' から 'java.lang.Class' に変換できません」というメッセージが表示される

もう 1 つのメモ: IKVM が何かを適切に変換しなかったのか、それとも単に道に迷ったのか疑問に思っています :)

だから、私の質問は次のとおりです。C#では、JavaコマンドInterface .classをどのように実行しますか?

4

1 に答える 1

1

HighCore のコメントで示唆されているように、「typeof(UserManager)」が必要です。のように

umgr = (UserManager)oimClient.getService(typeof(UserManager));

Java クラスを必要とするメソッドには、.NET タイプを提供できます。これは、java.lang.Class のメタデータを見て、SystemType への暗黙的なキャストを提供していることに注目するとわかります。

[Serializable]
[Signature("T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement;")]
public sealed class Class : Object, Serializable.__Interface, GenericDeclaration, Type, AnnotatedElement, ISerializable
{
    // <SNIP>
    public static implicit operator Class(global::System.Type type);
}
于 2014-01-14T22:51:37.480 に答える