Hallo,
ich würde gern das ITasklist Interface von C# aus verwenden. Die COM-Initialisierung eines ITasklist Objektes scheint fehlerfrei zu funktionieren, ich scheitere aber wohl an der korrekten Deklaration des Interfaces. Mein bisheriger Code:
// Deklaration der Tasklist Klasse
// laut MSDN wird bei verwenden des ComImport Attributs CoCreateInstance nicht benötigt
[ComImport]
[Guid(„56FDF344-FD6D-11d0-958A-006097C9A090“)]
public class Tasklist //: ITasklist
{
}
// Deklaration des Interfaces
// [ComImport, Guid(„56FDF344-FD6D-11d0-958A-006097C9A090“)]
public interface ITasklist {
//[DispId(1)]
[return: MarshalAs(UnmanagedType.FunctionPtr)]
IntPtr HrInit();
//[DispId(2)]
IntPtr AddTab([In] IntPtr hwnd);
//[DispId(3)]
IntPtr DeleteTab([In] IntPtr hwnd);
//[DispId(4)]
IntPtr ActivateTab([In] IntPtr hwnd);
//[DispId(5)]
IntPtr SetActivateAlt([In] IntPtr hwnd);
}
// diese werden dann in einer beliebigen Funktion instanziiert:
void eineFunktion() {
Tasklist list = new Tasklist(); // bis hier hin ist es noch ok, das Tasklist Object kann (scheinbar) einwandfrei erstellt werden
ITasklist ITasklist = (ITasklist)list; // hier bekomme ich dann eine InvalidCast Exception, vermute also, dass ich das Interface falsch deklariert habe
Wer weiß rat? Wie kann man generell ein COM Interface in C# nachbilden?
Vielen Dank für eure Mühen
Christian Dankl