Forum: PC-Programmierung Objektkatalog einer DLL, C#


von Christoph A. (shadowrunner93)


Angehängte Dateien:

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

von Geist (Gast)


Lesenswert?

Wahrscheinlich in der Form:

usb.WriteString("\r\nHallo Welt");

von Christoph A. (shadowrunner93)


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

von bluppdidupp (Gast)


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()

von C# COM Wrapper (Gast)


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.

von Christoph A. (shadowrunner93)


Lesenswert?

Viele Dank, KiWinUsbtmClass hat funktioniert ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.