Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249196 (10632)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Profan und DLL
Stefan Schnell
| Datum:08.02.02 22:38 (mail@stschnell.de) |
Hallo Community, ich kämpfe im Moment gerade mit folgendem Problem: Ich möchte einer DLL Routine eine FloatVariable übergeben, das sieht ungefähr so aus: DLL in Delphi: Library Test; Function SingleTest(x, y: Single):Single; StdCall; Begin Result:=x+y; End; Exports SingleTest Index 1; Begin End. Profan Programm: Declare i! Def @SingleTest(2) !"Test.DLL", "SingleTest" i! = Double(@SingleTest(Single(2.599), Single(2.123)) Als Resultat bekomme ich jedoch immer nur 2.599 zurückgeliefert und nicht 4.722 (wie eigentlich zu erwarten wäre). Mit den Variablentypen Cardinal und LongInteger funktioniert es so sehr gut, nur eben mit Single nicht. Was mache ich falsch? Danke für Eure Antworten. Tschüss Stefan Schnell
Roland G. Hülsmann
| Datum:09.02.02 00:27 (rgh-soft@t-online.de) |
Warum das so nicht funktioniert, ist mir auch nicht 100%ig klar. Offensichtlich macht Single als Rückgabeparameter Probleme. Wenn Du das Ergebnis aber vor der Rückgabe als Bitfolge in ein Longint kopierst und dieses zurückgibst, dann klappt es. So geht es:
    Library test;

    uses windows;

    Function SingleTest(x, y: Single):Longint; StdCall;
    var longvar:longint;
        singlevar:Single;
    Begin
      singlevar := x+y;
      movememory(addr(longvar),addr(singlevar),4);
      result := longvar;
    End;

    Exports

    singleTest Index 1;

    Begin
    End.
Stefan Schnell
| Datum:09.02.02 18:53 (mail@stschnell.de) |
Hallo Roland, ohne jetzt schwer von Begriff wirken zu wollen, aber wie kann ich die übergebene Bitfolge in der LongIntVariable wieder in eine "brauchbare" FloatZahl verwandeln? Danke und tschüss Stefan
Roland G. Hülsmann
| Datum: 09.02.02 20:24 (rgh-soft@t-online.de) |
Hallo Stefan, diese Umwandlung macht doch Dein im Posting erwähntes PROFAN-Programm schon! Genau das ist die Aufgabe der Funktion Double!

| Zurück zur Übersicht