Seite 1 von 1

CCalculateEx funktion 'OUT-strings' problem!

Verfasst: Dienstag 25. September 2012, 16:45
von IKT
Hallo zusammen

habe festgestellt, dass die jetzige Implementation mit $inputs funktioniert, aber $outputs jeweils überschrieben werden (mit 'was auch immer' am entspechenden input anliegt).
Dies auch wenn besagter input numerisch ist (ergibt irgendwelche nicht vorhersehbare Zeichen).
In den vorgestellten Beispielen ist das NICHT ersichtlich, da dort die Ausgabe mit PL-Simulations-Frequenz ausgegeben wird ~1 KHz.
Arbeitet man aber mit einer externen CLK an der DLL (in diesem Fall 'clockt' PLE), dann wird der Fehler offensichtlich (sobald die Routine nur noch von extern aufgerufen wird).

Komentare und Beschreibung im beiligenden Projekt und in der DLL source.
Eine 'feedback' Schleife ist eine funktionierende Übergangslösung.
HexToWord_DLL_DevC++_source.zip
Enthält: DLL, PLE-Beispiel und C source code für DevC++ 'voll komentiert' wie ich auch die Beispiele von Abacom gerne hätte.
(11.12 KiB) 410-mal heruntergeladen

Re: CCalculateEx funktion 'OUT-strings' problem!

Verfasst: Donnerstag 27. September 2012, 20:02
von tom_g
Hi IKT,
das Verhalten ist in der DLL Hilfe von Abacom wohl beschrieben

Zitat:
"Delphi: Procedure CalculateEx(PInput,POutput,PUser: PDLLParams; PStrings: PStringParams);
C++: void _stdcall CCalculateEx(double *PInput, double *POutput, double *PUser; StringParam PStrings)
Diese Methode wurde eingeführt um zusätzlich die Verarbeitung von Zeichenketten durch eine DLL zu ermöglichen und kann bei Bedarf alternativ zu CALCULATE verwendet werden. Die Zeichenketten werden mit dem Parameter PSTRINGS übergeben. Dabei handelt es sich um eine Zeigervariable, deren Delphi-Deklaration so aussieht:

type TStringParams = array[0..100] of PChar;
PStringParams = ^TStringParams;

Jedem Eingang/Ausgang (max. 100) der DLL ist ein Zeiger auf einen nullterminierten String (PChar) zugeordnet. Der Speicher auf den die PChar zeigen wird von ProfiLab bereitgestellt (max. 1000 Zeichen pro PChar). Bevor ProfiLab die Methode anspringt, werden die PChar mit den Werten von den $Eingängen belegt. Nach Verlassen der Methode gibt ProfiLab die Inhalte der PChar über die $Ausgänge aus. Ein Unterscheidung in Eingang und Ausgang findet hier nicht statt. So teilen sich z.B. Eingang 0 und Ausgang 0 den gleichen PChar. Um einen Eingang/Ausgang für Strings zu verwenden muss der zugehörige Pinname mit einem '$'-Zeichen beginnen. Beispiele für die Verarbeitung von Strings mit einer DLL und mit ProfiLab sind vorhanden."

Gruss Thomas

Re: CCalculateEx funktion 'OUT-strings' problem!

Verfasst: Montag 1. Oktober 2012, 16:22
von IKT
CCalculateEx_MEM_Diagram.png
CCalculateEx_MEM_Diagram.png (134.21 KiB) 5774 mal betrachtet
Hallo zusammen,
WoB hat geschrieben:Hallo IKT,
im Anhang ist die funktionierende Variante deiner DLL
mit Quellcode und Kommentaren.
M.f.G. WoB
entschuldige, aber der Titel des Beitrages ist NICHT "Hilfe, meine DLL funktioniert nicht."
Sie funktioniert sehr wohl, genau so, wie ich sie haben will. (Dein Code kompiliert,
jedoch der Linker steigt danach mit Fehler aus?!?)
Ausserdem steht im 'source-code' an erster Stelle geschrieben, dass ich nicht will, dass
an meinen C-sourcen Veränderungen gemacht werden!


ANMERKUNG:
Die dürfen grundsätzlich gemacht werden, dann aber unter einem 'anderen, eigenen' Namen,
auf die Verantwortung des jeweiligen Programmierers (nur für private Zwecke).

Der Beitrag ist grundsätzlich an ABACOM gerichtet, da damit eine Schwäche der gegenwärtigen
Implementation aufgezeigt wird. Niemand ausser ABACOM kann daran etwas ändern!

Es ist auch richtig, dass dies in der Hilfe beschrieben ist. Jedoch sollte es dem Schreiber der
Hilfe spätestens in genau dem Augenblick aufgefallen sein, dass dies keine 'saubere' Lösung ist.

Das ständige Ausgeben (mit Simulations-Frequenz von PL) ist genau so ein 'workaround', wie
die 'feedback-loop'; d. h. sie korrigiert am Resultat und nicht an der Ursache!

Da ich kein 'Schreiberling' bin, sondern Techniker (Informatik) habe ich das Ganze einmal
aufgezeichnet um den Sachverhalt aufzuzeigen. (Ganz oben im Beitrag)
Des Weiteren eine überarbeitete Projekt-Datei, welche das Problem aufzeigt (zusammen mit
'meiner' DLL, siehe erster Beitrag).

Hoffentlich habe ich es diesmal geschafft, mich unmissverständlich auszudrücken.

Gruss IKT

Re: CCalculateEx funktion 'OUT-strings' problem!

Verfasst: Dienstag 2. Oktober 2012, 07:31
von abacom
Der Beitrag ist grundsätzlich an ABACOM gerichtet, da damit eine Schwäche der gegenwärtigen
Implementation aufgezeigt wird. Niemand ausser ABACOM kann daran etwas ändern!
Es ist auch richtig, dass dies in der Hilfe beschrieben ist. Jedoch sollte es dem Schreiber der
Hilfe spätestens in genau dem Augenblick aufgefallen sein, dass dies keine 'saubere' Lösung ist.
Das ständige Ausgeben (mit Simulations-Frequenz von PL) ist genau so ein 'workaround', wie
die 'feedback-loop'; d. h. sie korrigiert am Resultat und nicht an der Ursache!
Das API ist nun einmal so wie es ist. Schön oder nicht schön. Daran wird sich wohl nichts ändern,
u.a. auch um bereits bestehende Entwicklungen auf dieser Basis nicht zu gefährden.
Dennoch Danke für das Feedback.