Objektkatalog einer DLL, C#

#2296944
Lesenswert?

Schönen Nachmittag ;)

Ich habe gerade gröbste Schwierigkeiten beim Verstehen des Aufbaus einer 
DLL.
Anbei ist ein Screenshot aus dem Objektkatalog von VisualStudio.

Erstens hat mich überrascht wieso folgender Code überhaupt funktioniert 
:
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.IO;
6
using KiWinUsbtmLib;
7
using VisaComLib;
8

9
namespace MSO_2024_Terminal
10
{
11
    class Program
12
    {
13
        public const string RES_NAME = "USB0::0x0699::0x0378::C000041::0::INSTR";
14

15
        public static KiWinUsbtm usb = new KiWinUsbtm();
16

17
        static void Main(string[] args)
18
        {
19
            usb.Init(RES_NAME);
20
        }
21
    }
22
}

Laut dem Objektkatalog ist KiWinUsbtm ein Interface, wieso also kann ich 
dann eine Instanz davon erstellen? Ich kenne Lib's nur von C, da gab es 
nur einen oder mehrere Header in denen die Funktionsprototypen standen 
und die man dann auch in seinem Programm verwenden konnte. Ist das in C# 
mit Interfaces gelöst?

Zweite Frage:

Ich möchte die Funktion "WriteString" von dem Inteface(??) IMessage 
aufrufen, wie stelle ich das an?

Hoffe jemand von euch hat die Geduld es mir zu erklären :)
Vielen Dank im Voraus!

Mfg
Christoph
Angehängte Dateien:
#2297194
Lesenswert?

Geist schrieb:
> Wahrscheinlich in der Form:
>
> usb.WriteString("\r\nHallo Welt");

Ich hab's wahrscheinlich blöd erklärt, die Funktion WriteString ist ganz 
woanders als in KiWinUsbtm. Die "init"-Funktion sollte nur zeigen dass 
es in der Zusammenstellung funktioniert, aber
1
IMessage mes = new IMessage();
2
mes.WriteString("1223");

so nicht. Wenn man sich den Objektkatalog ansieht, sieht man dass die 
WriteString-Funktion im Interface IMessage zuhause ist. Nun weiß ich 
aber nicht wie ich denn zu der Funktion gelange..

Mfg
Gast #2297211
Lesenswert?

Warum du das Interface instanziieren kannst ist eine sehr gute Frage.
Meiner Meinung nach müsstest du da eigentlich
KiWinUsbtmClass usb = new KiWinUsbtmClass();
stehen haben und hast dann vermutlich auch Zugriff auf usb.WriteString()
Gast #2297212
Lesenswert?

Lt. deinem Objektkatalog implementiert KiWinUsbtmClass die Schnittstelle 
IMessage. (Daher auch als "Basistyp" von KiWinUsbtmClass angezeigt.

Daher sollte ein Aufruf von WriteString auf dem Objekt von 
KwWinUsbtmClass funktionieren.

Also so wie Geist bereits geschrieben.
> usb.WriteString("\r\nHallo Welt");

Du kannst von KiWinUsbtm deshalb ein Objekt erstellen, da C# schon 
weiss, dass es sich um einen COM-Wrapper handelt und das richtige Objekt 
erstellt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren