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.