Hi, ----- Original Message ----- From: "Derick Smith" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]> Sent: Friday, February 28, 2003 9:09 PM Subject: Re: HELP mysql_server_init embedded in a DLL?
> Attempts at creating an embedded mySQL DLL for VB: > > I can successfully use the mysql_init() function from libmysql.lib to create > a DLL for VB. However, when I use this function (in a DLL or lib)linked > against the libmysqld.lib or mysqlserver.lib it crashes the VB application > but not the C application. > > I tried hard coding the arguments and servergroups for mysql_server_init (I > also used memset to initialize the strings to 0), I get the same result. > > The lib I create will always work with a C program, but the DLL will not > work with VB. You must take care with CALLING CONVENTIONS(__stdcall).This is be one reason for crash. > > Does anyone have any more suggestions on how to use the embedded library in > a Visual C DLL to link with VB? You can not access directly the mysql api function from VB.Are ,at least,two big problems :the VB type STRING which is UNICODE ; passing the data structure (like MYSQL which contain node lists) from VB to C or reverse.In my opinion you should make functions which will be interface between MYSQL C API and VB.Also you should make your own function to convert char to unicode and reverse.It's better if you don't use MultiByteToWideChar()...you will get a lot of "unpleasure surprises". Of course you can do some improvisation (like in mysql_init or to convert a STRING into ARRAY of BYTE) but is not a solution because VB imediatly will give you some error like "OUT OF MEMORY". Regards, Gelu _____________________________________________________ G.NET SOFTWARE COMPANY Permanent e-mail address : [EMAIL PROTECTED] [EMAIL PROTECTED] > > Thanks > Eric > > > p.s: Email received from another individual (Thanks!!): > > Put the libMySql.dll in the wint\system32 directory (or in the directory > where > your executable is!) > > > In vb, I use this one > > the declares: > > Public Declare Function mysql_init Lib "libmySQL" (ByVal lMYSQL As Long) > As > Long > Public Declare Function mysql_real_connect Lib "libmySQL" _ > (ByVal lMYSQL As Long, _ > ByVal sHostName As String, _ > ByVal sUserName As String, _ > ByVal sPassword As String, _ > ByVal sDbName As String, _ > ByVal lPortNum As Long, _ > ByVal sSocketName As String, _ > ByVal lFlags As Long) As Long > > > Public Function OpenConnection(ByVal sHostName As String, _ > ByVal sUserName As String, _ > ByVal sPassword As String, _ > ByVal sDbName As String, _ > Optional ByVal lPortNum As Long = 3306, _ > Optional ByVal lFlags As MYSQL_FLAG) As > MYSQL_CONNECTION_STATE > > ........ > mlMYSQL = mysql_init(mlMYSQL) > If mlMYSQL = 0 Then > no connection handler > Else > > 'connect to server > If mysql_real_connect(mlMYSQL, msHostname, msUsername, msPassword, > msDbName, mlPortNum, "", mlFlags) = 0 Then > ' oops > Else > 'connection established ... state is now open > End If > End If > > 'setup the return value > End Function > > > I myselve created an dll (in vb) which encapsulates all the stuff to connect > to > the database, use recordsets, .... (as close as possible to the ADO object > model: so with connection, recordset - objects, > bookmarks, fields, ...) > > Hope this helps. > > > > > > > > >From: "Gelu Gogancea" <[EMAIL PROTECTED]> > >To: "Derick Smith" > ><[EMAIL PROTECTED]>,<[EMAIL PROTECTED]>,<[EMAIL PROTECTED]> > >Subject: Re: HELP mysql_server_init embedded in a DLL? > >Date: Fri, 28 Feb 2003 14:40:31 +0200 > > > >Hi, > >----- Original Message ----- > >From: "Derick Smith" <[EMAIL PROTECTED]> > >To: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]> > >Sent: Thursday, February 27, 2003 10:33 PM > >Subject: Re: HELP mysql_server_init embedded in a DLL? > > > > > > > I am posting this again, in hope that I will get a response. > > > > > > I tried doing the following (see VB code below. I got this code from > >another > > > site): > > > > > > I get the same error message as if I was calling the DLL I created in C > > > which calls mysql_server_init. > > > > > > Is it impossible to call this function from VB or embedded in another > >DLL > > > from VB? > > > Can I only use the embedded mysql library in C or C++? > > > > > > Thanks > > > Eric > > > > > > Public Declare Function mysql_server_init Lib > > > "C:\mysql40\source\lib_release\libmysqld.dll" _ > > > (ByVal argc As Long, _ > > > ByVal argv As Byte, _ > > > ByVal groups As Byte) As Long > > > > > > Private Sub cmdmysq_server_init_Click() > > > Dim argv(0) As Byte, groups(0) As Byte > > > Dim i As Long > > > argv(0) = Asc("0") > > > groups(0) = Asc("0") > > > i = mysql_server_init(0, argv, groups) > > > End Sub > >In my opinion,this will never work because argv and groups are pointed to > >array which have a pointer ....char*(*); > >But anyhow...if you wish to try again this formula, must declare argv and > >groups ByRef because VB is responsable for the stack and the variable must > >be initialized before using like argument in function.Since argv and > >groups > >are byte is a non-sense to use ASC(). > >I'm very pessimistic that will be work. > > > > > > > > > > > > > > > > > >From: "Derick Smith" <[EMAIL PROTECTED]> > > > >To: [EMAIL PROTECTED], [EMAIL PROTECTED] > > > >Subject: mysql_server_init embedded in a DLL? > > > >Date: Wed, 26 Feb 2003 14:34:28 +0000 > > > > > > > >Hi! > > > > > > > >I am trying to create a DLL that will hide embedded mySQL functions for > >use > > > >with VB. I am using mysqlserver.lib. I am able to compile and execute > >the > > > >following code. This has to be done in C because VB is too slow :-( > > > > > > > >If mysql_server_init function is run in the DLL from Visual Basic. I > >get > > > >the following error message: "..referenced memory at "0x000000". The > > > >memory could not be read". > > > > > > > >Without the mysql_server_init function it will run correctly. It will > >also > > > >run correctly when this is compiled as a .lib file linked to a C > >program. > > > > > > > >Is it possible to embed mysql_server_init in a DLL? (So the DLL can be > >used > > > >in VB) > > > > > > > >Thanks in advance for any responses. > > > > > > > >Thanks > > > >Eric > > > > > > > > > > > >header1.h > > > > > > > >#define GPAPI __stdcall > > > > > > > >header2.h > > > > > > > >typedef unsigned long DBS; > > > >#define NULLDBS (DBS)0 > > > > > > > >api.c > > > > > > > >GPAPI DBS dbNewSet (char * basedir, char * datadir, char * dbname) > > > >{ > > > > return NewSet(basedir,datadir,dbname); > > > >} > > > > > > > > > > > >newset.c > > > > > > > >extern DBS NewSet(char * basedir, char * datadir, char * dbname) > > > >{ > > > > DBSET* pSet = CreateSet(); > > > > char *args[3]; > > > > char strArgs[3][1024]; > >I guess some problems can be elimanted if you initialize the variables > >which > >are declared or if you allocate some memory. > >Anyhow you can use '\0' - termination string to be sure that you don't have > >*other garbage* after your string.This *garbage* can influence the lenght > >of the string.Bad thing. > > > > > > int iRtn; > > > > int argc = 3; > > > > > > > > strcpy(strArgs[0],"this_program"); > > > > > > sprintf(strArgs[1],"--basedir=%s",basedir); > > > > sprintf(strArgs[2],"--datadir=%s",datadir); > > > > args[0]= strArgs[0]; > > > > args[1]= strArgs[1]; > > > > args[2]= strArgs[2]; > > > > > > > >/* If I comment out this line of code, > > > >the DLL will run correctly. > > > >If mysql_server_init function is run in the DLL. I get the following > > > >error message: "..referenced memory at "0x000000". The > >...this means that one of your variables is NULL.This error occur because > >you don't *catch* the right pointer.By using equal sign you pass the > >pointer > >to lvalue and not the value.At the address of pointer you can find the > >value. > > > > > >memory could not be read" */ > > > > iRtn = mysql_server_init(3, args, server_groups); > > > > > > > > if (pSet ==0 ) return NULLDBS; > > > > memset(pSet, 0, sizeof(DBSET)); /* Zero the structure. */ > > > > pSet->size = sizeof(DBSET);/* Assign structure size. */ > > > > pSet->magic = DBS_MAGIC; /* Assign magic number. */ > > > > > > > > return (DBS)(void*)pSet; > > > >} > > > >If you have a little patience (maybe a week or two...i try to find some > >available time for this) a new version of GMySQL(An interface between MYSQL > >C API function and VB or other development platform for Windows) will be > >released.This new version, will contain the implementation of the new > >replication functions and also will be able to work with libmysqld. > > > >Regards, > > > >Gelu > >_____________________________________________________ > >G.NET SOFTWARE COMPANY > > > >Permanent e-mail address : [EMAIL PROTECTED] > > [EMAIL PROTECTED] > > > > > > > > > > > _________________________________________________________________ > > > The new MSN 8: smart spam protection and 2 months FREE* > > > http://join.msn.com/?page=features/junkmail > > > > > > > > > --------------------------------------------------------------------- > > > Before posting, please check: > > > http://www.mysql.com/manual.php (the manual) > > > http://lists.mysql.com/ (the list archive) > > > > > > To request this thread, e-mail <[EMAIL PROTECTED]> > > > To unsubscribe, e-mail > ><[EMAIL PROTECTED]> > > > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php > > > > > > > > > > > >--------------------------------------------------------------------- > >Please check "http://www.mysql.com/Manual_chapter/manual_toc.html" before > >posting. To request this thread, e-mail [EMAIL PROTECTED] > > > >To unsubscribe, send a message to the address shown in the > >List-Unsubscribe header of this message. If you cannot see it, > >e-mail [EMAIL PROTECTED] instead. > > > > > _________________________________________________________________ > Tired of spam? Get advanced junk mail protection with MSN 8. > http://join.msn.com/?page=features/junkmail > > > --------------------------------------------------------------------- > Please check "http://www.mysql.com/Manual_chapter/manual_toc.html" before > posting. To request this thread, e-mail [EMAIL PROTECTED] > > To unsubscribe, send a message to the address shown in the > List-Unsubscribe header of this message. If you cannot see it, > e-mail [EMAIL PROTECTED] instead. > > --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php