Floatzahl und Userlibs [gelöst]
Übersicht

![]() |
Der EisvogelBetreff: Floatzahl und Userlibs [gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aha, ich habs jetzt so versucht:
Code: [AUSKLAPPEN] short uErgebnis=zahl1+zahl2/100;
return uErgebnis;//GetNumberofDate(uOstertag,uOstermonat,uJahr); Das funzt leider auch net. ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ... ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du float zurück geben willst, dann schreib es doch einfach so. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ChristianK hat Folgendes geschrieben: @Dreamora, CALLBACK = _stdcall Oh, ok ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group