CCalculateEx funktion 'OUT-strings' problem!

Antworten
IKT
Beiträge: 554
Registriert: Mittwoch 4. November 2009, 18:32

CCalculateEx funktion 'OUT-strings' problem!

Beitrag von IKT » Dienstag 25. September 2012, 16:45

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
++++++
Gruss/regards IKT

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: CCalculateEx funktion 'OUT-strings' problem!

Beitrag von tom_g » Donnerstag 27. September 2012, 20:02

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
Curiousity makes us progress !

IKT
Beiträge: 554
Registriert: Mittwoch 4. November 2009, 18:32

Re: CCalculateEx funktion 'OUT-strings' problem!

Beitrag von IKT » Montag 1. Oktober 2012, 16:22

CCalculateEx_MEM_Diagram.png
CCalculateEx_MEM_Diagram.png (134.21 KiB) 5776 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
Dateianhänge
CCalculateEx_Test.prj
(9.08 KiB) 394-mal heruntergeladen
++++++
Gruss/regards IKT

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: CCalculateEx funktion 'OUT-strings' problem!

Beitrag von abacom » Dienstag 2. Oktober 2012, 07:31

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.
ABACOM support

Antworten

Zurück zu „DLL-Programmierung“