Posted: Mon Feb 04, 2002 10:10 am
				
				Restored from previous forum. Originally posted by gnozal.
I have another problem with DLL's : I tried some code (database example) wich works OK in a PureBasic EXE but crashes in a PureBasic DLL !
What is wrong ?
**** PUREBASIC EXE **** (works)
If InitDatabase() = 0
MessageRequester("InitDatabase", "Initialisation impossible (ODBC v3 ou superieur necessaire)!", 0)
End
EndIf
OpenDefaultConsole()
If ExamineDatabaseDrivers()
While NextDatabaseDriver()
If DatabaseDriverName() = "XXX"
XXX_OK=1
EndIf
Wend
EndIf
If XXX_OK = 0
PrintN("DatabaseDriverName : XXX est introuvable parmi les drivers ODBC !")
Else
If OpenDatabase(0, "XXX", "XXX", "XXX")
etc...
**** PUREBASIC DLL **** (don't work)
ProcedureDLL.s OpenBaseXXX()
If InitDatabase() = 0
MessageRequester("InitDatabase", "Initialisation impossible (ODBC v3 ou supérieur nécessaire)!", #MB_ICONERROR)
ProcedureReturn "ERROR ODBC"
EndIf
If ExamineDatabaseDrivers()
While NextDatabaseDriver()
If DatabaseDriverName() = "XXX"
XXX_OK = 1
EndIf
Wend
EndIf
If XXX_OK = 0
MessageRequester("DatabaseDriverName", "XXX est introuvable parmi les drivers ODBC !", #MB_ICONERROR)
ProcedureReturn "ERROR XXX"
Else
If OpenDatabase(0, "XXX", "XXX", "XXX")
ProcedureReturn "OK"
Else
MessageRequester("OpenDatabase", "Impossible de se connecter à la base XXX !", #MB_ICONERROR)
ProcedureReturn "ERROR BASE"
EndIf
EndIf
EndProcedure
etc...
**** RAPID-Q (ESSAIDLL) ****
DECLARE FUNCTION OpenBaseXXX LIB "Purebasic" ALIAS "_OpenBaseXXX" AS STRING
'
IF OpenBaseXXX "OK" THEN <--------- CRASH
APPLICATION.TERMINATE
END
END IF
etc...
*****
CRASH WHEN CALLING OpenBaseXXX from Rapid-Q (also from PowerBasic) :
ESSAIDLL a causé une défaillance de pile dans le module KERNEL32.DLL à 0187:bff724c1.
Registres :
EAX=002a0037 CS=0187 EIP=bff724c1 EFLGS=00000206
EBX=ff089000 SS=018f ESP=100050ca EBP=100050de
ECX=00000022 DS=018f ESI=100050ee FS=46c7
EDX=81c55488 ES=018f EDI=81c55488 GS=0000
Octets à CS : EIP :
6a ff e8 07 ad 01 00 eb e7 55 8b ec 56 57 53 8b
État de la pile :
ff089000 81c55490 100050ee 00000000 00000000 10005148 bff72858 81c55488 100050ee 016f512c 01bf0028 000000ff 0000474f 00000000 000047c7 0000461f
			I have another problem with DLL's : I tried some code (database example) wich works OK in a PureBasic EXE but crashes in a PureBasic DLL !
What is wrong ?
**** PUREBASIC EXE **** (works)
If InitDatabase() = 0
MessageRequester("InitDatabase", "Initialisation impossible (ODBC v3 ou superieur necessaire)!", 0)
End
EndIf
OpenDefaultConsole()
If ExamineDatabaseDrivers()
While NextDatabaseDriver()
If DatabaseDriverName() = "XXX"
XXX_OK=1
EndIf
Wend
EndIf
If XXX_OK = 0
PrintN("DatabaseDriverName : XXX est introuvable parmi les drivers ODBC !")
Else
If OpenDatabase(0, "XXX", "XXX", "XXX")
etc...
**** PUREBASIC DLL **** (don't work)
ProcedureDLL.s OpenBaseXXX()
If InitDatabase() = 0
MessageRequester("InitDatabase", "Initialisation impossible (ODBC v3 ou supérieur nécessaire)!", #MB_ICONERROR)
ProcedureReturn "ERROR ODBC"
EndIf
If ExamineDatabaseDrivers()
While NextDatabaseDriver()
If DatabaseDriverName() = "XXX"
XXX_OK = 1
EndIf
Wend
EndIf
If XXX_OK = 0
MessageRequester("DatabaseDriverName", "XXX est introuvable parmi les drivers ODBC !", #MB_ICONERROR)
ProcedureReturn "ERROR XXX"
Else
If OpenDatabase(0, "XXX", "XXX", "XXX")
ProcedureReturn "OK"
Else
MessageRequester("OpenDatabase", "Impossible de se connecter à la base XXX !", #MB_ICONERROR)
ProcedureReturn "ERROR BASE"
EndIf
EndIf
EndProcedure
etc...
**** RAPID-Q (ESSAIDLL) ****
DECLARE FUNCTION OpenBaseXXX LIB "Purebasic" ALIAS "_OpenBaseXXX" AS STRING
'
IF OpenBaseXXX "OK" THEN <--------- CRASH
APPLICATION.TERMINATE
END
END IF
etc...
*****
CRASH WHEN CALLING OpenBaseXXX from Rapid-Q (also from PowerBasic) :
ESSAIDLL a causé une défaillance de pile dans le module KERNEL32.DLL à 0187:bff724c1.
Registres :
EAX=002a0037 CS=0187 EIP=bff724c1 EFLGS=00000206
EBX=ff089000 SS=018f ESP=100050ca EBP=100050de
ECX=00000022 DS=018f ESI=100050ee FS=46c7
EDX=81c55488 ES=018f EDI=81c55488 GS=0000
Octets à CS : EIP :
6a ff e8 07 ad 01 00 eb e7 55 8b ec 56 57 53 8b
État de la pile :
ff089000 81c55490 100050ee 00000000 00000000 10005148 bff72858 81c55488 100050ee 016f512c 01bf0028 000000ff 0000474f 00000000 000047c7 0000461f