Hilscher Profinet Karte-VC++ DLL für VB.net

knuppel

Level-1
Beiträge
189
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit einem VC++ Programm (war mit als Beispielprogramm) baue ich eine lokal eine Verbindung zu einer Hilscher Profinetkarte auf (bis die Verbindung steht vergehen 5 bis 10 Sekunden). Einmal aufgebaut kann ich ständig Bytes von der Karte bekommen, bzw. Bytes an die Karte schicken. Siehe Bild.

Nun würde ich aus dem Programm gerne eine DLL basteln um auch mit VB.net auf die Karte zugreifen zu können.

Zum testen habe ich (siehe Bild) Funktion A und B als eine Funktion, kann diese auch per VB.net aufrufen und bekomme nach ein paar Sekunden einen Wert. Der Nachteil, ich muss bei jedem Aufruf die Verbindung aufbauen lassen um an einen Wert zu kommen und das dauert eben.

Dann habe die Funktion in A und B gesplittet. Aus VB.net wird Funktion A aufgerufen (funktioniert) und bei Bedarf Funktion B, das funktioniert aber nicht, es scheint so als wäre die Verbindung zur Karte wieder weg.

Meine Frage(n), gibt es sowas wie eine statische DLL? Wie könnte man da noch vorgehen?

Wie kann ich eine erstellte DLL mit Visual Studio debuggen die gerade von einem anderen Programm verwendet wird?




P.s.: Im Moment läuft der Austausch über einen lokalen C++ Server der die Bytes zwischen Karte und VB.net Programm, das tuts auch, eine DLL wäre mir aber lieber.
 
Deine DLL benötigt so etwas wie ein Handle oder ein Zeiger auf eine Datenstruktur in dem die Verbindungsdaten über die Funktionen hinweg übergeben werden.

D.h. wenn du eine Funktion VerbindeMitProfinetKarte() hast, dann übergibst du dieser einen Zeiger auf eine Datenstruktur für die Verbindungsdaten, und wenn du dann SendeDatenAnProfinetKarte() aufrufst übergibst du dieser auch diesen Zeiger, und bei VerbindungTrennen() auch wieder um die Verbindung abzubauen und die Ressourcen freizugeben.

Ich habe das schon mal gemacht in dem ich das ganze Handling in eine C++ Klasse gepackt und dann eine reine C-Api drumherum gebaut habe, deren Funktionen exportiert werden.
 
Kannst ja mal bei libnodave schauen, das ist auch eine in C geschriebene dll. Dort sind einige Beispiele dabei wie das in anderen Sprachen aufgerufen werden kann, auch .Net.
 
Mit einigen Einschränkungen kannst du die Daten auch in einer globalen Variable speichern. Du brauchst dann aber trotzdem ein explizites Verbinden / Trennen, oder baust die Verbindung dann ggf. automatisch auf. Das funktioniert dann nur, wenn von einem Prozess die Funktionen der dll auch nur zu einer bestimmten Ressource verwendet werden.
 
Zurück
Oben