Ui Klassen in C#

  • Hallo,


    vielen Dank für den letzten Hinweis. Der hat mir sehr weitergeholfen. Ein Suche hat folgende wunderbare Seite ausgespuckt, die das ganze sehr gut erklärt


    http://www-10.lotus.com/ldd/nd…71250005b618?OpenDocument


    ich habe den Code bei mir entsprechend angepasst und es läft auch schon ganz gut. Ein paar Probleme bestehen noch.


    Hier erstmal die Übersetzung der Zeilen nach C#


    VBA: session=CreateObject("Notes.NotesSession)


    In C# sieht das ganze dann so aus:
    Type NotesSessionType = Type.GetTypeFromProgID("Notes.NotesSession");
    object NotesSession = Activator.CreateInstance(NotesSessionType);


    Danach kann man dann mit InvokeMember auf die Elemete zugreifen und alles machen. Es ist zwar nicht so übersichtlich wie in VBA tut aber wunderbar.


    Nun kurz zu meinem Problem:
    Ein Aufruf heißt wie folgt:
    object[] Mime_Settings = { (Object)false };


    try
    {
    object Mime = NotesSessionType.InvokeMember("ConvertMIME", BindingFlags.SetProperty, null, NotesSession, Mime_Settings);
    }
    catch (TargetInvocationException ex)
    {
    MessageBox.Show(ex.InnerException.Source.ToString());
    }


    Leider kommt da immer ne Fehlermeldung 0x8000FFFF E_UNEXPECTED. Kann sich das jemand erklären?

  • Interessanter Thread, man lernt ja nie aus.


    gremgiz, "ConvertMIME" ist eine Eigenschaft (Property), keine Methode. Die kann man, soweit ich informiert bin, nicht mit InvokeMember aufrufen.


    Aus der Designer-Hilfe:


  • Hallo,


    daher nutze ich ja SetProperty. Wenn man so im Netz sucht findet man eigenlich immer InvokemEthod um eine Eigenschaft zu setzen. Wie würdest du es denn machen?


    Gruß
    gremgiz

  • Hi,


    Ich habe ien wenig gespielt und herausgefunden, dass:


    Type NotesSessionType = Type.GetTypeFromProgID("Notes.NotesSession");
    object NotesSession = Activator.CreateInstance(NotesSessionType);


    bool obj = (bool)NotesSessionType.InvokeMember("ConvertMIME", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
    BindingFlags.Instance | BindingFlags.GetProperty, null, NotesSession, null);


    Wunderbar funktioniert. Nur wenn ich danach aufrufe:


    NotesSessionType.InvokeMember("ConvertMIME", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, NotesSession, new object[] {false});


    Knallt es mit „TargetInvocationException“. HRESULT: 0x8000FFFF (E_UNEXPECTED). Kann mir irgendjemand sagen was ich da falsch mache?

  • Hallo,


    scheinbar beißen sich da mehrere Leute die Zähne dran aus. Ich möchte mich erst einmal bei allen bedanken, die sich darüber den Kopf zerbrochen haben. Ich für meinen Teil habe es jetzt so gelöst, dass ich in VB eine DLL geschrieben habe, die ich über C# einbinde. Manchmal ist VB doch die bessere Alternative


    Falls noch Ideen bestehen, bitte posten.


    Gruß
    Gremgiz

  • Hallo,


    leider habe ich noch keine Lösung, wie vermutet... ich werd mir das wieder ansehen, sobald meine drecks Telefonalnage läuft.


    Kann sich nur noch um Monate handeln :(


    Bis dahin Danke für eure Hinweise!


    Ich werde eine eventuelle Lösung hier Posten.


    VG
    Pascal

  • Ja, das Thema ist 2 Jahre alt, aber vielleicht hilft es ja jemandem, der, wie ich, beim Googlen über diesen Thread stolpert:


    Mit BindingFlags.PutDispProperty statt SetProperty funktioniert es.