webForumDet fria alternativet

Ett litet exempel på embedded mysql för VC++ 6.0?

C/C++

2 svar · 181 visningar · startad av d98rolb

Medlem sedan apr. 200123 inlägg
Frågan#1

Jag försöker använda libmysqld.dll från C, men mitt program kraschar när jag kör den här koden. Jag skulle bli tacksam för hjälp!

/* A Win32 application in Visual C++ is defined */
#include "stdafx.h"
#include <Windows.h>
#include <Winbase.h>

typedef int (CALLBACK* SERVER_INIT_FPTR)(int, char **, char **); typedef void (CALLBACK* SERVER_END_FPTR)(void);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
SERVER_INIT_FPTR mysql_server_init;
SERVER_END_FPTR mysql_server_end;

// Hårdkodning ok, bara ett testprogram
LPCTSTR dlldir = "D:\\Program\\mysql\\Embedded\\DLL\\release\\libmysqld.dll";
HMODULE mysql_dll;

if(mysql_dll = LoadLibrary(dlldir))
{
mysql_server_init = (SERVER_INIT_FPTR) GetProcAddress(mysql_dll, "mysql_server_init");
mysql_server_end = (SERVER_END_FPTR) GetProcAddress(mysql_dll, "mysql_server_end");

// Crash: Unhandled exception in mysql.exe (LIBMYSQLD.DLL): 0xC0000005: Access violation
mysql_server_init(0, NULL, NULL); 
mysql_server_end();
FreeLibrary(mysql_dll);

}
return 0;
}

Här är ett utdrag från dokumentationen för mysql_server_init():

"The NULL-terminated list of strings in groups selects which groups in the option files will be active. See section 4.1.2 `my.cnf' Option Files. For convenience, groups may be NULL, in which case the [server] and [emedded] groups will be active. "

Så jag tänket det kan vara ok att skicka NULL som argument till mysql_server_init(). Här är min "C:\winnt\my.ini" file:

#This File was made using the WinMySQLAdmin 1.4 Tool #2003-03-25 16:23:20

#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions

[mysqld]
basedir=D:/Program/mysql
#bind-address=192.168.0.2
datadir=D:/Program/mysql/data #language=D:/Program/mysql/share/your language directory #slow query log#= #tmpdir#= #port=3306 #set-variable=key_buffer=16M

[WinMySQLadmin]
Server=D:/Program/mysql/bin/mysqld-nt.exe
QueryInterval=10

[server]
language=D:\Program\mysql\share\swedish

[emedded]

Jag vet int vad jag ska lägga till under [server] och [embedded] grupperna. Men det kan väl inte vara orsaken till kraschen?

/Roland

Medlem sedan juni 20022 599 inlägg
#2

Men det kan väl inte vara orsaken till kraschen?

Har ingen egen erfarenhet av embedded mysql. Men det låter väl inte helt otänkbart att man kan få en krasch om indata utelämnas på båda ställena?

Här är nån som har ett liknande problem (i Delphi) och ett exempel på hur hans embedded-sektion (OBS! Stavning) ser ut.

Medlem sedan juni 200010 432 inlägg
#3

Släng ut lite breakpoints och kör debug.

Så jag tänket det kan vara ok att skicka NULL som argument till mysql_server_init().

Har inte heller testat embeddedvarianten, men när jag för en tid sedan testade det vanliga C api'et för mySQL var det helt korrekt att skicka "0" som argument i init för att få ett handtag i retur.

248 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)