Seite 1 von 2

Invalid Memory Access beim Zugriff auf eine DLL

Verfasst: 05.10.2005 10:08
von Beforegod
Moin,

habe mir von TS-Soft die DLL2PBLib software runtergeladen und für die libmysql.dll genutzt.

Allerdings wenn ich über die DLL Versuche Zugriff auf eine DB zu bekommen, bricht er mit einem "Invalid Memory Access" ab. Im Debug Fenster sehe ich leider auch nix :(

Woran kann das liegen?

Re: Invalid Memory Access beim Zugriff auf eine DLL

Verfasst: 05.10.2005 10:19
von Kiffi
> Woran kann das liegen?

meine Kristallkugel ist z.Zt. in der Reparatur. Ein Stückchen Code wäre deshalb hilfreich.

Grüße ... Kiffi

Verfasst: 05.10.2005 10:34
von Beforegod
hmm schade, soll ich dir meine leihen ;)

Code: Alles auswählen

IncludeFile "libmySQL.pb"

Global dbHnd.l
Global *sql

libmySQL_init()

OpenConsole()

mysql_init(dbHnd)

If mysql_real_connect(*sql, dbHnd, "xxx", "xxx", "xxx", 3306, "", 0) = 0
  Print(Str(dbHnd))
EndIf
und hier die funtkionen aus der libmysql.pb

Code: Alles auswählen

ProcedureDLL libmySQL_Init()
  Shared DLL.l
  DLL = LoadLibrary_("libmySQL.dll")
  If DLL
...
    mysql_real_connect = GetProcAddress_(DLL, "mysql_real_connect")

...
  EndIf
EndProcedure

ProcedureDLL.l mysql_real_connect(a.l,b.l,c.s,d.s,e.s,f.l,g.s,h.l)
  ProcedureReturn CallFunctionFast(mysql_real_connect,a,b,c,d,e,f,g,h)
EndProcedure

Er hängt bei dem connect (mysql_init klappt wunderbar)

Verfasst: 05.10.2005 10:58
von Kiffi
> hmm schade, soll ich dir meine leihen ;)

die scheint ja nicht viel zu taugen. Ansonsten würdest Du hier ja nicht nachfragen ;)

Ich lade mir gerade mal das mySQL-Paket herunter, um das
nachzuvollziehen. Parallel kannst Du mal versuchen, anstelle von
[c]CallFunctionFast()[/c] ein [c]CallCFunctionFast()[/c] zu verwenden.

// Edit:

An CallCFunctionFast() liegt's schon mal nicht...

Grüße ... Kiffi

Verfasst: 05.10.2005 11:12
von Beforegod
Das witzige :

Mit dem Beispiel aus dem Codearchiv (soll ich den code hier posten) gehts einwandfrei.

Liegt es evt. daran das die sql Routinen über einen Wrapper aufgerufen werden?

Verfasst: 05.10.2005 11:16
von edel
Beforegod hat geschrieben:Liegt es evt. daran das die sql Routinen über einen Wrapper aufgerufen werden?
Eigentlich nicht , kann es sein das die dll nicht im Compillerordner liegt ?

Edit : oups das "Er hängt bei dem connect (mysql_init klappt wunderbar)"
hab ich ueberlesen :-(

Verfasst: 05.10.2005 11:30
von Kiffi
> Mit dem Beispiel aus dem Codearchiv (soll ich den code hier posten) gehts
> einwandfrei.

so, wie ich das sehe, benötigst Du den Parameter [c]a[/c] nicht. Dieser wäre dazu
da, die DLL-Funktionsadresse zu übergeben, die Du in der ProcedureDLL aber
nicht benötigst, da Du ihn ja direkt angibst. Dein [c]mysql_real_connect[/c] ist also
in Wirklichkeit der Parameter [c]a[/c]

Code: Alles auswählen

ProcedureDLL.l mysql_real_connect(b.l,c.s,d.s,e.s,f.l,g.s,h.l)
  ProcedureReturn CallFunctionFast(mysql_real_connect,b,c,d,e,f,g,h)
EndProcedure 
Mangels [c]dbHnd[/c] kann ich das jetzt auch nicht verifizieren.

Grüße ... Kiffi

Verfasst: 05.10.2005 11:32
von Beforegod
Kiffi hat geschrieben:> Mit dem Beispiel aus dem Codearchiv (soll ich den code hier posten) gehts
> einwandfrei.

so, wie ich das sehe, benötigst Du den Parameter [c]a[/c] nicht. Dieser wäre dazu
da, die DLL-Funktionsadresse zu übergeben, die Du in der ProcedureDLL aber
nicht benötigst, da Du ihn ja direkt angibst. Dein [c]mysql_real_connect[/c] ist also
in Wirklichkeit der Parameter [c]a[/c]

Code: Alles auswählen

ProcedureDLL.l mysql_real_connect(b.l,c.s,d.s,e.s,f.l,g.s,h.l)
  ProcedureReturn CallFunctionFast(mysql_real_connect,b,c,d,e,f,g,h)
EndProcedure 
Mangels [c]dbHnd[/c] kann ich das jetzt auch nicht verifizieren.

Grüße ... Kiffi
hmm das mit dem dbHnd habe ich aus dem Codearchiv.
Ich probier mal diesen Parameter wegzulassen.

@hallodri :

Sie liegt im Ordner, daran liegts nicht :(

//Änderung :

Geht leider nicht. Parameter a bringt auch nix :(

Verfasst: 05.10.2005 11:40
von edel
Vielleicht hilft dir das hier weiter , bin mir allerdings
nicht sicher ob ich alles richtig gemacht habe. MySQL.pb

Verfasst: 05.10.2005 11:48
von Kiffi
> hmm das mit dem dbHnd habe ich aus dem Codearchiv.
> Ich probier mal diesen Parameter wegzulassen.

nein, ich meine nicht dbHnd, sondern *sql (was immer das sein mag).

Grüße ... Kiffi