Floatzahl und Userlibs [gelöst]

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Der Eisvogel

Betreff: Floatzahl und Userlibs [gelöst]

BeitragMo, März 10, 2008 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
ich habe eine Funktion in einer Dll, die eine Floatzahl zurückgibt. Was muss ich in den Userlibs nun schreiben? Ich habe es so versucht:
Zitat:
Funktion#(variablen) : "Funktion"

Das hat leider nicht hingehauen. Wenn ich die Funktion jetzt aufrufe gibt sie "NaN" zurück. Ich bin ratlos.

mfg
Marc-Peter
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
  • Zuletzt bearbeitet von Der Eisvogel am Mo, März 10, 2008 18:48, insgesamt 2-mal bearbeitet
 

Dreamora

BeitragMo, März 10, 2008 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
das würd so eigentlich stimmen. In dem fall kommt vermutlich auch NAN von deiner DLL zurück (irgendwas /0 oder sehr kleine zahl) oder du gibst Double oder so zurück statt float.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Der Eisvogel

BeitragMo, März 10, 2008 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, diese Dll ist von mir. Ich benutzt C++. So gebe ich den Wert zurück:
Code: [AUSKLAPPEN]
zahl1=3
zahl2=5
return zahl1+zahl2/100

Teoretisch müsste die Funktion "3,05" zurückgeben, oder?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Dreamora

BeitragMo, März 10, 2008 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
nicht wirklich ,das sieht alles nach integer aus ... dann würde folglich 0 zurück kommen oder sowas.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Der Eisvogel

BeitragMo, März 10, 2008 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Aha, ich habs jetzt so versucht:
Code: [AUSKLAPPEN]
  short uErgebnis=zahl1+zahl2/100;
  return uErgebnis;//GetNumberofDate(uOstertag,uOstermonat,uJahr);

Das funzt leider auch net. Crying or Very sad
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Dreamora

BeitragMo, März 10, 2008 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
short is nice ... aber bringt nix, muss schon int sein wenn du int zurück liefern willst (% in decls)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Der Eisvogel

BeitragMo, März 10, 2008 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber ich will doch eine Kommazahl haben.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BtbN

BeitragMo, März 10, 2008 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Marc-Peter hat Folgendes geschrieben:
Also, diese Dll ist von mir. Ich benutzt C++. So gebe ich den Wert zurück:
Code: [AUSKLAPPEN]
zahl1=3
zahl2=5
return zahl1+zahl2/100

Teoretisch müsste die Funktion "3,05" zurückgeben, oder?


Dieser Code ist garantiert kein C++-Code, es fehlt der Daten-Typ und das Semikolon.
So sähe deine funktion richtig aus:
Code: [AUSKLAPPEN]
float returnANumber()
{
   float zahl0 = 3.0;
   float zahl1 = 5.0;
   return zahl0+(zahl1/100.0);
}


Float ist hierbei eine 32bit Gleitkomma zahl, so wie sie auch in BB verwendet wird.
Wie die decls aussieht ka.

Der Eisvogel

BeitragMo, März 10, 2008 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das float hab ich vergessen. Es ist aber C++.

Edit: So sieht die Funktion im ganzen aus:
Code: [AUSKLAPPEN]
EXPORT short CALLBACK GetDateofEaster(int uJahr)
{
  int g=uJahr % 19;
  int c=uJahr/100;
  int h=(c-c/4-(8*c+13)/25+19*g+15) % 30;
  int i=h-h/28*(1-29/(h+1)*(21-g)/11);
  int j=(uJahr+uJahr/4+i+2-c+c/4) % 7;
  int l=i-j;
  int uOstermonat=3+(l+40)/44;
  int uOstertag=l+28-31*(uOstermonat/4);
  short uErgebnis=uOstertag+uOstermonat/100;
  return uErgebnis
}               

Auf jeden Fall geht es nicht.
 

Dreamora

BeitragMo, März 10, 2008 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
wird er auch nie.
schau dir ma unter blitzbasic.com in den spezifikationen für userlib den C++ source an und dann deine funktion speziell die definition.
dann solltest du wissen was schief läuft, nämlich so ziemlich alles.
wär glaub simpler es in Blitz umzusetzen ausser du willst vorher wirklich C++ lernen um damit zu arbeiten, denn das ist kein DLL source!
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Der Eisvogel

BeitragMo, März 10, 2008 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich versuche einen Interogar zurückzugeben, geht da ja.
Also kann ja garnicht alzu viel schief gehen.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Dreamora

BeitragMo, März 10, 2008 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
nochmal: solange der function header so bleibt wirst du NIEMALS ein resultat erhalten!
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Der Eisvogel

BeitragMo, März 10, 2008 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Was meinst du damit genau? Etwa das hier:
Code: [AUSKLAPPEN]
#include <windows.h>
#include "dll.h"

Das ist drin.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Dreamora

BeitragMo, März 10, 2008 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meine den Funktionsheader. Ich verweise nochmal auf die specification seite auf www.blitzbasic.com -> community
schau dir das userlib C++ beispiel an und du wirst es sehen oder mach dir die 3 minuten mühe zu recherchieren wie man in einer DLL funktionen exportiert.

dein header wird eindeutig niemals funktionieren innerhalb von blitz.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Der Eisvogel

BeitragMo, März 10, 2008 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Da war ich schon und es Funktioniert alles, bis auf diese eine Funktion.
Und ich habe diese Tutorial benutzt:
https://www.blitzforum.de/foru...php?t=1449
Meinesachtens habe ich es so gemacht wie es da steht.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Dreamora

BeitragMo, März 10, 2008 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
du hast gemacht was da steht ja. aber net was spezifiziert ist seitens BRL, denn dort wird nicht CALLBACK genutzt (mit denen hats Blitz allgemein nicht so) sondern _stdcall. kann sein weil sein Beispiel auf MingW also GCC ausgelegt ist (Dev C++)


hier ein auszug aus dem offiziellen beispiel unter www.blitzbasic.com

Code: [AUSKLAPPEN]

#define BBDECL extern "C" _declspec(dllexport)

#define BBCALL _stdcall

//1st function: inverts bits in a bank
//
BBDECL void BBCALL InvertBits( char *bank,int offset,int sz )


ach ja noch was zu gang am anfang: ich vermute das .lib "deinDLLName.dll" steht da schon als erstes oder? weil sonst findet er die DLL garnicht erst ... Wink
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Der Eisvogel

BeitragMo, März 10, 2008 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja. Sonst würden die anderen Funktionen doch auch nicht Funktionieren und Blitz würde eine Fehlermeldung ausspucken, oder?

EDIT: Also, wenn was falsch ist, bitte schreien. Ich habs jetzt so versucht:
dllmain.cpp
Code: [AUSKLAPPEN]
#include <windows.h>
#include "dll.h"

BBDECL short BBCALL GetDateofEaster(int uJahr)
{
  int g=uJahr % 19;
  int c=uJahr/100;
  int h=(c-c/4-(8*c+13)/25+19*g+15) % 30;
  int i=h-h/28*(1-29/(h+1)*(21-g)/11);
  int j=(uJahr+uJahr/4+i+2-c+c/4) % 7;
  int l=i-j;
  int uOstermonat=3+(l+40)/44;
  int uOstertag=l+28-31*(uOstermonat/4);
  short uErgebnis=uOstertag+uOstermonat/100;
  return uErgebnis
}

dll.h
Code: [AUSKLAPPEN]
#define BBDECL extern "C" _declspec(dllexport)
#define BBCALL _stdcall

BBDECL short BBCALL GetDateofEaster(int uJahr);

Es geht aber immernoch net. Bin ich doof oder schwer von Begriff? Oder ist vielleicht der Compiler schult?
  • Zuletzt bearbeitet von Der Eisvogel am Mo, März 10, 2008 16:48, insgesamt einmal bearbeitet
 

ChristianK

BeitragMo, März 10, 2008 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du float zurück geben willst, dann schreib es doch einfach so. Rolling Eyes
Short sind nämlich ebenfalls Ganzzahlen.

Floats schreibst du so auf:

Code: [AUSKLAPPEN]
float meineZahl = 2.5f;

Beachte das kleine "f" hinter der Zahl. Wenn du das nicht hinschreibst, wird deine Zahle als double behandelt.

Andere Frage: Warum brauchst du Kommazahlen, um das Oster-Datum zu ermitteln?

@Dreamora,
CALLBACK = _stdcall
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Der Eisvogel

BeitragMo, März 10, 2008 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil ich nicht weiß wie ich das Datum sonst zurück geben müsste.
Also so: 23.3
Ich habe ja den Tag und den Monat. Wie kann ich die 2 so 23.3 zurückgeben?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Dreamora

BeitragMo, März 10, 2008 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ChristianK hat Folgendes geschrieben:

@Dreamora,
CALLBACK = _stdcall


Oh, ok Embarassed
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group