Seite 1 von 3
					
				MySQL C Library
				Verfasst: 07.08.2011 00:41
				von Velz
				Hallo Jungs...
Seit Jahren nutze ich eine include aus dem Forum für die libmysqlc.
Das ging so:
Code: Alles auswählen
CFF_MySQL_Real_Connect  = GetFunction(#libmysql, "mysql_real_connect") 
Procedure MySQL_Real_Connect (dbHnd,host.s,user.s,password.s,db.s,port.l,options.l)
  ProcedureReturn CallFunctionFast(CFF_MySQL_Real_Connect,dbHnd, host, user, password.s, db, port, 0, options)
EndProcedure
Bis PB Version 4.30 funktioniert das auch problemlos. Nun wollte ich auf 4.51 und es geht nichts mehr. 
Bevor nun die Antwort lautet "Das macht man mit Prototypes...!!!" habe ich das natürlich gemacht.
Code: Alles auswählen
Prototype.l proto_connect(dbHnd, host, user, passwd, db, port, nul, options)
mysql_real_conntect.proto_connect=GetFunction(1, "mysql_real_connect")
Debug mysql_real_conntect(dbHnd, *host, *user, *passwd, *db, port,*null, 0) 
Nur leider funktioniert es nicht!
Hier noch die Beschreibung von Mysql:
mysql_real_connect()
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd,
const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag) 
Hat jemand eine Idee?
 
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 00:48
				von STARGÅTE
				Naja du musst schon in Prototype die einzelnen Parameter Definieren, und nicht nur hinschreiben.
Mit definieren meine ich: was ist ein String, was ein nur ein StringPointer, was ist eine Zahl usw.
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 00:55
				von Velz
				Du meinst das?
Code: Alles auswählen
Prototype.l proto_connect(dbHnd.l, *host.s, *user.s, *passwd.s, *db.s, port.l, *nul.s, options.l)
mysql_real_conntect.proto_connect=GetFunction(1, "mysql_real_connect")
Debug mysql_real_conntect(dbHnd, *host, *user, *passwd, *db, port,*null, 0) 
 
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 03:05
				von ts-soft
				Eher so: 
Code: Alles auswählen
Prototype.i proto_connect(dbHnd.i, host.s, user.s, passwd.s, db.s, port.l, nul.s, options.l)
mysql_real_conntect.proto_connect=GetFunction(1, "mysql_real_connect")
Debug mysql_real_conntect(dbHnd, host, user, passwd, db, port, "", 0) 
 
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 05:34
				von Danilo
				ts-soft hat geschrieben:Eher so: 
Code: Alles auswählen
Prototype.i proto_connect(dbHnd.i, host.s, user.s, passwd.s, db.s, port.l, nul.s, options.l)
 
So werden aber Unicode-Strings übergeben, wenn man mit Unicode kompiliert.
Um es immer automatisch nach Ascii (char*) zu konvertieren, kann man den
Pseudotyp 'p-ascii' verwenden:
Code: Alles auswählen
Prototype.i proto_connect(mysql.i, host.p-ascii, user.p-ascii, passwd.p-ascii, db.p-ascii, port.l, unix_socket.p-ascii, client_flag.l)
Kann auch sein das man PrototypeC verwenden muß. Oben steht jedenfalls
nichts von stdcall.
 
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 10:55
				von ts-soft
				Auch bei Pseudotypes kommt kein Pointer-Zeichen davor  

 
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 11:01
				von Danilo
				thx.
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 12:15
				von Velz
				Ihr seid der Hammer....! Danke!
Mit den p-ascii funktioniert es auf Anhieb! 
Gibt es irgendwo ein TUT oder Beitrag in dem das ganze erklärt wird?
Seltsamerweise funktioniert unter Linux64 immer noch ganz klassisch CallFunction
Code: Alles auswählen
CallCFunction(0, "mysql_real_connect", MYSQL, @dbhost, @dbuser, @dbpass, @dbname, dbport, #Null, #Null)
unter WIN32 funktioniert eure Lösung 
Code: Alles auswählen
Prototype.i proto_connect(mysql.i, host.p-ascii, user.p-ascii, passwd.p-ascii, db.p-ascii, port.l, unix_socket.p-ascii, client_flag.l)
mysql_real_conntect.proto_connect=GetFunction(1, "mysql_real_connect")
Debug mysql_real_conntect(dbHnd, host, user, passwd, db, port,null, 0)
Ich werde mal versuchen das include auf Prototype umzusetzen... und teste dann unter Linux!
 
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 12:23
				von Danilo
				Velz hat geschrieben:Gibt es irgendwo ein TUT oder Beitrag in dem das ganze erklärt wird?
Steht alles in der Hilfe. Auf Prototype gehen, F1 drücken und lesen.
Dort ist dann auch ein Link zu den Pseudotypes. 

 
			 
			
					
				Re: MySQL C Library
				Verfasst: 07.08.2011 12:28
				von Vermilion
				Moment - warum benutzt du nicht den MySQL C Connector und die mitgelieferte *.lib-Datei? damit kannst du mittels Import Befehlen die Dinger praktisch verlinken. Beispiel:
Code: Alles auswählen
Import "libmysql.lib"
mysql_error(MySqlObject)
EndImport
So habe ich es zumindest gemacht, als ich den Connector benutzt habe.