Mehrere Fragen zur Verbindung mit C(++)

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Hummelpups

Betreff: Mehrere Fragen zur Verbindung mit C(++)

BeitragMo, Okt 17, 2005 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Tag, ich habe mal ein paar dringende Fragen
die ich unbedingt beantwortet brauche. Ich
arbeite gerad bei uns in der Software entwicklungsabteilung und
da ist mein Kollege ganz angetan von Blitz Max wenn
denn das Einbinden von DLLs oder einbinden von C FUnktionen
gehen würde.

Kan mir das bitte einer erklären? Is echt wichtig, haben es schon
mit dem Beispiel ausprobiert, er sagt aber nur compile doubler.c
und so weiter gibt aber nichts aus.

Danke danke

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

rema

BeitragMo, Okt 17, 2005 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau mal im eng. Forum www.blitzbasic.com oder versuche es mal hier mit der Suche!

bruZard

BeitragMo, Okt 17, 2005 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Schaue Dir doch einfach mal ein paar Mods aus der BRL Abteilung an die C Code einbinden ... als Beispiel sei hier brl.mod/system.mod genannt ... da kann man sehr viel erkennen wie das System so funktioniert.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Abrexxes

BeitragMo, Okt 17, 2005 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.blitzbasic.com/Comm...opic=42290

Wink

cu

TheShadow

Moderator

BeitragMo, Okt 17, 2005 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
DLL kann man auch dynamisch laden... geht mit normalen API-Funktionen...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Hummelpups

BeitragMo, Okt 17, 2005 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Das komische nun, (habe mir den GNU Compiler runter geladen
habe ich im path Envirounment vars noch den Pfad angegeben
zu all den Exen die er haben wollte.

ES HAT BEREITS GEFUNZT

Nur nach einen Neustart verweigert der C Compiler den Dienst, hier
der Code:
Code: [AUSKLAPPEN]

//bla.bmx
Import "add.c"
Extern
   Function Doubler( var1 )
End Extern
Print Doubler(5)

Code: [AUSKLAPPEN]

//add.c
int Doubler( int x )
{
   Return x+x;
}

Code: [AUSKLAPPEN]

//Fehler:
Building ctest
Compiling:add.c
C:/Dokumente und Einstellungen/IMurDOOM-2k/Desktop/test/add.c: In function `Doubler':
C:/Dokumente und Einstellungen/IMurDOOM-2k/Desktop/test/add.c:3: error: `Return' undeclared (first use in this function)
C:/Dokumente und Einstellungen/IMurDOOM-2k/Desktop/test/add.c:3: error: (Each undeclared identifier is reported only once
C:/Dokumente und Einstellungen/IMurDOOM-2k/Desktop/test/add.c:3: error: for each function it appears in.)
C:/Dokumente und Einstellungen/IMurDOOM-2k/Desktop/test/add.c:3: error: parse error before "x"

Process complete


IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Hummelpups

BeitragMo, Okt 17, 2005 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ARRRRGHHHHHHHHHHHHHHHHHHHHHHHHH
GEGEN DEN SCHEISS KOPF SCHLAG

ich sollte evtl. bi der *.c und der *.bmx datei die
selben Vars benutzen.

Trotzdem danke, ich werde bestimmt noch ein paar Fragen haben,
lese mir nun aber erst mal das Pointer Tutorial durch.

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

Nemesis

BeitragMo, Okt 17, 2005 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
em c ist case sensitive. das muss return heißen und nicht Return

Suco-X

Betreff: .......

BeitragMo, Okt 17, 2005 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Und beim Thema DLLs mit Bmax, solltest du dich mal im Tutorialbereich umschauen.Ich bin mir relativ sicher das du da was finden wirst.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Hummelpups

BeitragMo, Okt 17, 2005 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Schönen Dank das habe ich schon gemacht ^^ nachdem nix anderes
mehr geholfen hat.

Was ist nun wenn ich einen Ptr weiter gebe an C:

Code: [AUSKLAPPEN]

Import "add.c"
Extern
   Function Set( var1 )
End Extern

Global ptr_lol:Int Ptr
Global lol=10
Ptr_lol=Varptr(lol)

Print lol 'Müsste 10 sein
Set(ptr_lol)
Print lol 'Müsste 7 sein


Code: [AUSKLAPPEN]

//add.c
int Set( int * var1 )
{
   var1=7;
   return 1;
}


Den wert nun ändere sagen wir auf 7 und sich die function dann beendet.
Dann muss es ja im SPeicher umgeschrieben worden sein und im
weiteren programmablauf müsste var(ptr_lol) ja 7 sein.

ur wie schreibe ich in C mithilfe des Pointers den Wert um?



EDIT: Danke geht, fehlte etwas i der BMX

Code: [AUSKLAPPEN]
Import "add.c"
Extern
   Function Set( var1:---Int Ptr--- ) ''Natürlich ohne ---
End Extern

Global ptr_lol:Int Ptr
Global lol=10
Ptr_lol=Varptr(lol)

Print lol 'Müsste 10 sein
Set(ptr_lol)
Print lol 'Müsste 7 sein
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
  • Zuletzt bearbeitet von Hummelpups am Mo, Okt 17, 2005 22:14, insgesamt 2-mal bearbeitet

lucifer

BeitragMo, Okt 17, 2005 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kannst du so machen:

Code: [AUSKLAPPEN]

//add.c
int Set( int * var1 )
{
   *var1=7;
   return 1;
}


* ist der dereferenzier Operator. So kannst du den Wert eines Pointers erhalten und setzen.
Aktuelles Projekt:
Demonspawn
RPG

Hummelpups

BeitragMo, Okt 17, 2005 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum das da hin muss verstehe ich nicht, was ist mit dem Pointer 123345
bla blubb blubb, also der Integerwert mit dem Pointer, wird der nicht
geändert?

Ist *var1 sozusagen ein Link direkt auf den Speicher so dass ich den Integerwert des Ptr garnicht ndern kann? Muss ich ihn mit einem Befehl
neu setzen?

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Jolinah

BeitragMo, Okt 17, 2005 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
*var1 dereferenziert den Zeiger. Das heisst *var1 ist zu Beginn 10 und du sagst *var1 = 7;

var1 hingegen ist der Pointer selber und nicht der Wert an den er hinzeigt. Machst du var1=7 so schreibst du in den Zeiger die Adresse 7, worauf er auch dahin zeigt.

Grob gesagt ist jeder Zeiger nur ein Int. Als Wert enthält er eine Speicheradresse. Wenn du nun ein * davor setzt bekommst du den Wert zurück der an dieser Adresse im Speicher steht (Dereferenzierung). Man kann den Wert aber nicht nur abfragen sondern auch setzen. Weshalb sowas gültig ist:

Code: [AUSKLAPPEN]
int a = 10;
int *pt = &a;
int b = *pt; // Funktioniert wegen Dereferenzierung (gibt 10 zurück)
b = pt; // Funktioniert nicht, weil b kein Pointer ist.
b = (int)pt; // Da ein Pointer im Grunde ein int ist, lässt er sich aber in int konvertieren
// Jedoch enthält b dann die Speicheradresse statt dem Wert 10.

Hummelpups

BeitragDi, Okt 18, 2005 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die ausführliche erklärung,
nun hab ichs verstanden meine ich. Smile

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group