Hallo,
ich kämpfe gerade mit einer dll, die ich in meine Applikation einbinden will. Vielleicht kann mir jemand von Euch helfen. Ich habe leider keine Ahnung von Delphi.
Es geht konkret um die Übergabe der Daten. Leider steige ich nicht durch die Datentypüen in Delphi durch.
Hier einmal ein Besipiel. Zuerst die Beschreibung aus der Doku:
[
attachment=3639]
Und hier der Code eines Delphibeispieles, dass die DLL einbindet:
[
attachment=3640]
Kann auch die gesamte Doku zur Verfügung stellen.
Wäre sehr dankbar, wenn mir einer Tipps geben könnte.
Gruß
sven
Hallo Sven,
als erstes musst du herausfinden was die Datentypen "TProcWithPChar", "vPort" und "PChar" bedeuten. Du kannst es mit Bytearray versuchen. Ich bin auch kein Delfin, aber es sollte machbar sein.
Gruss, Eugen
Habe schon mehrere Mails an den Hersteller der DLL und der Hardware (Elnec Programmiergeräte) geschrieben. Leider kommen die Infos sehr zäh rüber.
Der Entwickler von dort schrieb mir...
> data is TProcWithPChar? Is it a pointer?
Pointer to null-terminated string.
Daraufhin habe ich einen Kollegen hier in der Firma gefragt. Er arbeitet jedoch mit C und könnte mir auch nicht richtig helfen.
Was mich stutzig macht ist, dass die Variable eine Prozedur aufruft. Mein Kollege sagte, dass man dadurch zwei Pointer bekommt.
Kann ich so etwas überhaupt in LV verarbeiten?
Gruß
sven
' schrieb:Kann ich so etwas überhaupt in LV verarbeiten?
Zwar weis ich das nicht genau, ich bin aber der Meinung: eher nicht.
PChar ist ein nullterminierter String, das geht auf jeden Fall. TProcWithPChar ist eine Funktion, die von der DLL heraus aufgerufen wird. Diese Funktion muss im Anwenderprogramm liegen. Die Funktion CreateClientAnd... teilt also der DLL mit, dass die eine Funktion cProcessProc eben über diesen Pointer ansprechbar ist. Ebenso mit der Funktion vWriteToLogProc.
' schrieb:Zwar weis ich das nicht genau, ich bin aber der Meinung: eher nicht.
PChar ist ein nullterminierter String, das geht auf jeden Fall. TProcWithPChar ist eine Funktion, die von der DLL heraus aufgerufen wird. Diese Funktion muss im Anwenderprogramm liegen. Die Funktion CreateClientAnd... teilt also der DLL mit, dass die eine Funktion cProcessProc eben über diesen Pointer ansprechbar ist. Ebenso mit der Funktion vWriteToLogProc.
Meinst du es ist eine Callbackfunktion? Dann geht es in LV nicht. Callbackmechanismus funktioniert in LV nur bei ActiveX, bei DLLs geht es nicht.
Aber hier steht doch, es wäre ein Pointer auf String.
> data is TProcWithPChar? Is it a pointer?
Pointer to null-terminated string.
Dann sollte es auch mit Stringtyp laufen.
Gruss, Eugen
' schrieb:Meinst du es ist eine Callbackfunktion?
Ja. So in der Art.
Zitat:Aber hier steht doch, es wäre ein Pointer auf String.
Das was da steht und das, was in der zweiten Graphik steht "type TProcWithPChar = procedure(line: PChar); stdcall;" passt aber nicht zusammen. Und da halt ich mich doch zuerst einmal an die Graphik. PChars, also der Parameter line in der Funktion sowie die beiden anderen Parameter, sind Pointer auf Strings.
Im übrigen muss ich noch dazusagen, dass ich meine Zeit mehr mit Delphi verbringe als mit LabVIEW.
Hallo IchSelbst,
ich hatte auch schon das Gefühl, dass der Support des Herstellers nicht genau wußte, worum es geht.
Scheinbar ruft die DLL Funktionen im Anwenderprogramm auf. Leider kann man dies in LabVIEW nur bei ActiveX und .net verarbeiten. Schade.
Vielen Dank für die Hilfe, dann werde ich mich mal darauf konzentrieren, dass ich das Telnetprotokoll rausbekomme.
Gruß
sven