Mehrere Fragen zur Verbindung mit C(++)
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
HummelpupsBetreff: Mehrere Fragen zur Verbindung mit C(++) |
Mo, Okt 17, 2005 16:23 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 17, 2005 19:19 Antworten mit Zitat |
|
---|---|---|
Schau mal im eng. Forum www.blitzbasic.com oder versuche es mal hier mit der Suche! | ||
bruZard |
Mo, Okt 17, 2005 19:29 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 17, 2005 19:41 Antworten mit Zitat |
|
---|---|---|
http://www.blitzbasic.com/Comm...opic=42290
cu |
||
TheShadowModerator |
Mo, Okt 17, 2005 20:07 Antworten mit Zitat |
|
---|---|---|
DLL kann man auch dynamisch laden... geht mit normalen API-Funktionen... | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Hummelpups |
Mo, Okt 17, 2005 21:35 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 17, 2005 21:49 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 17, 2005 21:54 Antworten mit Zitat |
|
---|---|---|
em c ist case sensitive. das muss return heißen und nicht Return | ||
Suco-XBetreff: ....... |
Mo, Okt 17, 2005 22:06 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 17, 2005 22:08 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 17, 2005 22:13 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 17, 2005 22:17 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 17, 2005 23:05 Antworten mit Zitat |
|
---|---|---|
*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 |
Di, Okt 18, 2005 20:06 Antworten mit Zitat |
|
---|---|---|
Vielen Dank für die ausführliche erklärung,
nun hab ichs verstanden meine ich. IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group