Laden...

Word-Interop latebinding: Wie schreibe ich ein DefaultUsertemplate-Property?

Erstellt von Nunz vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.472 Views
N
Nunz Themenstarter:in
1 Beiträge seit 2011
vor 12 Jahren
Word-Interop latebinding: Wie schreibe ich ein DefaultUsertemplate-Property?

Ich sitze nun schon 5 Stunden hier und versuche über C# und late binding den DOT-Pfad in Word einzustellen.

Ohne Latebindung gehts das schnell mit

wdApp.Options.set_DefaultFilePath(wd.WdDefaultFilePath.wdUserTemplatesPath, DotPath);

Aber mit Late Bindung bekomme ich es nicht hin!

Auslesen konnte ich es schon mit

object Options = wdType.InvokeMember("Options", System.Reflection.BindingFlags.GetProperty, null, wdApp, null);
				object wdTemplatePath = GetEnumValue("WdDefaultFilePath", "wdUserTemplatesPath");
				Object[] Parameters = new Object[1];
				Parameters[0] = wdTemplatePath;
				String Path = Options.GetType().InvokeMember("DefaultFilePath", BindingFlags.GetProperty, null, Options, Parameters).ToString();

Aber beim Schreiben komme ich nicht auf den Trichter. Versuchsweise mit

				Object[] Parameters = new Object[1];
				Parameters[0] = @"D:\\ProNotar\\KursDot";
				Options.GetType().InvokeMember("DefaultFilePath", BindingFlags.SetProperty, null, Options, Parameters);

oder ähnlichen Versuchen komme ich nicht weiter.
Kann es sein, dass in den parameter sowohl der Typ der Option wie auch der Pfad selbst zusammen verwurschtelt werden ?

Wäre klasse, wenn ih mir hier nen Hint geben könntet!

Gruss, Nunz

Gelöschter Account
vor 12 Jahren

Was passiert denn wenn du es aufrufst?
Eine Fehlerbeschreibung wäre hilfreich.

Auf Anhieb fällt mir auf das DefaultFilePath 2 Parameter erwartet
du aber im LateBinding nur 1 Parameter übergibst.
Wahrscheinlich bekommst du eine TargetInvocationException.

1.665 Beiträge seit 2006
vor 12 Jahren

Die Methode heißt doch **set_**DefaultFilePath! Und ob da BindingFlags.SetProperty funktioniert, weiß ich nicht. Es ist immerhin eine Methode, die aufgerufen wird, und nicht ein Property.

Gelöschter Account
vor 12 Jahren

Hallo Junky,

Da bist du etwas auf den Holzweg geraten. Properties selbst sind quasi eine Illusion. Equivlente "get_" und "set_" Methoden existieren für jedes (beschreibare)Property. Normalerweise siehst du davon nix. Mach mal das Experiment bei einer Klasse mit bool Visible Property eine bool get_Visible(); Methode dazu zu schreiben, das wird nix.

In dem Fall sind get_ und set_ bei der generierten Interop DLL sichtbar da C# Properties mit Paramatern syntaktisch nicht unterstützt, bei Early Binding sprichst du ja nicht den COMServer direkt an sondern die Interop Wrapper DLL.

Bei nativem LateBinding gehst du nicht über einen Interop Wrapper sondern sprichst den COM Server direkt an, der weiss auch nix von get_ oder _set daher ist BindingFlags.SetProperty und einfach nur DefaultFilePath richtig.

Early Regards
Sebastian

1.665 Beiträge seit 2006
vor 12 Jahren

Achso, war mir jetzt nicht klar, dass beim Late Binding der Aufruf nicht genauso erfolgt.