Skocz do zawartości

Recommended Posts

Napisano

Cześć wszystkim, O swoją drogą to fajnie, że coś ruszyła nasza scenka. Ale ja tutaj napiszę z bardzo poważnym problemem. O tóż mój problem dotyczy bardzo dobrego i niezawodnego narzędzia jakim jest Visual Studio 2008. No więc przechodząc do sedna sprawy mam taki problem ściągnąłem sobie mysql i do niego wszystkie potrzebne pliczki mysql.h etc. dodatkowo ściągnąłem libmysgl.def przekonwertowałem go na libmysgl.lib za pomocą liba napisałem krótką aplikację:

#include "mysql/mysql.h" #pragma comment(lib, "libmysql.lib"); ... MYSQL *sock; sock = mysql_init(NULL);

Program się ładnie kompiluje ale przy uruchomieniu wywala mi błąd, że nie może odnaleźć mysql_init@4, w LIBMYSQL.dll no fajnie zerknąłem sobie jak mam zdefiniowaną funkcję:

MYSQL * STDCALL mysql_init(MYSQL *mysql);

I lipa STDCALL powodóje dodanie upiększaczy w stylu @4 @8 etc. zalezy ile bajtów mają argumenty przekazywane do funkcji. Nie mogę użyć cdecl bo będę mieć kochany problem ze stosem i się aplikacja po drodze wykolei. Dodam, że pod dev cpp wszystko działa ok jeżeli dodasz -lmysql i nie masz żadnych problemów z upiększaczami. Wiem, że można usunąć @ grzebiąc w pliku ale potrzebuję żeby mi się ładnie program kompilował z nazwą jaką chce. Dodatkowo nie mogę zmienić nazw funkcji w dll ponieważ nie jestem jej twórcą a ona należy do Sun Microsystem więc ta droga odpada. Pozostaje jeszcze przez LoadLibrary i GetProcessAddress ale za dużo mam tych funkcji do użycia... Więc jeżeli ktoś ma jakieś pomysły to proszę pisać. Pozdrawiam mirz

Napisano

Ja strzelam, że masz projekt w C++, a te liby od MySQL-a są w C napisane i sie kłóci konwencja, spróbuj dodać do tych headerów z MySQL extern "C"

#ifdef __cplusplus
extern "C" {
#endif

DWORD __stdcall Procka(DWORD Parametr);

#ifdef __cplusplus
} // extern "C"
#endif
głowy nie daje...
Napisano

Siemka, Biblioteka jest napisana w C a program pisze w C++, extern "C" jest standardowo dodany do pliku mysql.h ale to i tak nic nie zmienia w Visualu uparcie dodaje tą swoją dekorację:

#ifdef __cplusplus extern "C" { #endif #ifndef _global_h /* If not standard header */ #include #ifdef __LCC__ #include /* For windows */

No cóż napiszę sobie metodę która będzie ładować adresy funkcji które będą mi potrzebne. Próbowałem użyć mysql++.h ale taki sam rezultat. OT - unicode mam wyłączony standardowo ustawiam na Multi-Byte... Pozdrawiam mirz

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...