IShellDispatch5 Vista XP

07/11/2007 - 09:50 von Christian.Tratz | Report spam
Hi,

wenn ich ein C#-Programm mit Verweis zur Shell32 unter Vista erstelle
und versuche unter XP laufen zu lassen erscheint folgender Fehler:

Unable to cast COM object of type 'Shell32.ShellClass' to interface
type 'Shell32.IShellDispatch5'. This operation failed because the
QueryInterface call on the COM component for the interface with IID
'{866738B9-6CF2-4DE8-8767-F794EBE74F4E}' failed due to the following
error: No such interface supported (Exception from HRESULT: 0x80004002
(E_NOINTERFACE)).
at Shell32.ShellClass.NameSpace(Object vDir)

Neue Funktionen von Vista werden nicht genutzt. Beim Build auf XP lief
alles. Wie kann ich nun auch auf Vista entwickeln und trotzdem
lauffàhige XP-Versionen erzeugen?

IDE: Visual Studio 2005 Express

Gruss
Chris
 

Lesen sie die antworten

#1 Frank Dzaebel
07/11/2007 - 12:51 | Warnen spam
Hallo Christian,

wenn ich ein C#-Programm mit Verweis zur Shell32 unter Vista erstelle
und versuche unter XP laufen zu lassen erscheint folgender Fehler: [...]
Unable to cast COM object of type 'Shell32.ShellClass' to interface
type 'Shell32.IShellDispatch5'. This operation failed because the
... Wie kann ich nun auch auf Vista entwickeln und trotzdem
lauffàhige XP-Versionen erzeugen?



Du solltest für den Fall mehrere unterstützte COM-Versionen in
einer Assembly immer gegen die tiefste Schnittstelle codieren.
In diesem Fall IShellDispatch4 benutzen (>= XP) , IShellDispatch5
ist erst ab Vista möglich.

IShellDispatch4 shell4 = (IShellDispatch4)new Shell32.ShellClass();
shell4.FindPrinter("p0671234", "", "");

Oder komplett latebind mit Versions-neutraler ProgID etwa:

Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
object shell = Activator.CreateInstance(shellAppType);
object printer = shell.GetType().InvokeMember("FindPrinter",
BindingFlags.Instance | BindingFlags.OptionalParamBinding |
BindingFlags.InvokeMethod, null, shell, new object[]
{ "p0671234" });

siehe auch:

[Betriebssystemerkennung mit C# .NET]
http://dzaebel.net/VersionInfo.htm


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen