Interop

23/07/2009 - 17:04 von ingo | Report spam
Hallo NG,

ich habe ein Problem mit Zielplattform x86 und x64.
Wenn ich mit x86 mein Programm erstelle làuft alles prima mit ANy CPU oder
x64 macht mir ein Interop Probleme er meldet das die dll nicht vorhanden
ist.

Um diese Problem zu umgehen, dachte ich mir mache ich ein lateBinding.
AssemblyName asmName = new AssemblyName("Interop.SKYPE4COMLib");
asmName.Version = new Version("1.0.0.0");
asmName.CultureInfo = CultureInfo.InvariantCulture;
asmName.SetPublicKeyToken(HexConvert.ToByteArray("ee66f6602aa2f5bb"));
Assembly asm = null;
try
{
asm = Assembly.Load(asmName);
Type pt = asm.GetType("SKYPE4COMLib.Skype")
}
catch {
}

Nur mein Prolem unter x86 sowie unter x64 kann ich den interop und den type
laden.
Wie kann ich feststellen, ob der Type auch initialiesiren ist??


Danke im voraus

Ingo
 

Lesen sie die antworten

#1 Frank Dzaebel
23/07/2009 - 23:29 | Warnen spam
Hallo Ingo,

Um diese Problem zu umgehen, dachte ich mir mache ich ein lateBinding.
AssemblyName asmName = new AssemblyName("Interop.SKYPE4COMLib");
asmName.Version = new Version("1.0.0.0");
asmName.CultureInfo = CultureInfo.InvariantCulture;
asmName.SetPublicKeyToken(HexConvert.ToByteArray("ee66f6602aa2f5bb"));
Assembly asm = null;
try
{ asm = Assembly.Load(asmName);
Type pt = asm.GetType("SKYPE4COMLib.Skype")
}
catch { }



Skype ist ein Interface, SkypeClass ist die instanziierbare Klasse - halt
COM.
Du kannst mit folgendem Code latebind prüfen, ob Skype installiert ist.
(skypeType darf nicht null sein). An den "ms.Count" kannst Du sehen,
dass es keinen öffentlichen Konstruktor gibt (nur private).


Guid skypeGuid = new Guid("830690FC-BF2F-47A6-AC2D-330BCB402664");
try
{
Type skypeType = Type.GetTypeFromCLSID(skypeGuid, true);
skype = Activator.CreateInstance(skypeType);
// Das ist eine: "SKYPE4COMLib.SkypeClass"
}
catch (Exception exp)
{
MessageBox.Show("Mein Latebind Hinweis auf:" +
exp.Message); return;
}
// [Wie man so etwas herausbekommt]
// -> durch F12 auf die typsichere Klasse, kann man (oft) die GUID erfahren.

___________

Du könntest auch öffentliche Konstruktoren mit:
ConstructorInfo[] ms = skypeType.GetConstructors();
prüfen. Private mit BindingFlags.Instance und NonPublic.

Wenn diese Prüfung geschehen ist, ggf. die streng
typisierte Assembly latebind laden - und dann auch etwas wie:

SKYPE4COMLib.SkypeClass sc = new SKYPE4COMLib.SkypeClass();
bool running = sc.Client.IsRunning; // ...

_______________

Hier C# Beispiele:

[CodeProject: Skype4COM Event Handler Example For ALL Skype API Messages]
http://www.codeproject.com/KB/cs/SEHE.aspx

[Docs/Examples - Skype Developer Zone]
https://developer.skype.com/Docs/Ex...275f971b60

Hier ein Download eines Beispiel-Projektes:

[SEHEwc.zip ( 61.7K )]
http://forum.skype.com/index.php?ac...amp;id2391

ggf. helfen auch die VBS-Beispiele:

[Docs/Skype4COMLib/Call vbs - Skype Developer Zone]
https://developer.skype.com/Docs/Sk...b/Call_vbs
___________


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

Ähnliche fragen