fbpx
Welcome, Guest
Username: Password: Remember me
Qui si parla italiano
  • Page:
  • 1

TOPIC: Conversione Libreria di interfaccia a LibMySql.dll

Conversione Libreria di interfaccia a LibMySql.dll 1 year 3 months ago #4355

  gianluca.pinoli's Avatar Topic Author gianluca.pinoli Offline Posts: 28
Buongiorno a tutti.
da poco ho cominciato a sperimentare l'import dei miei progetti VO in X#.
Siccome la maggior parte dei progetti ha un utilizzo misto di DBF e MySql attraverso LibMySql ho cominciato subito da quest'ultimo componente.
Per l'interfaccia uso una vecchia classe che credo fosse stata scritta da Fabrice Foray.
La compilazione è andata a buon fine, ma usandola ho subito riscontrato un errore:

***************************************************************************************************
Error occurred in C:\GDOshop\PosExplorer\GDOx-PosExplorer.exe at 20/03/2018 12:32:56
Impossibile effettuare il marshalling di 'return value': I puntatori non possono fare riferimento a strutture per le quali è stato eseguito il marshalling. Utilizzare ByRef.
Callstack:
in GDO-00-LoadSQLlib.Functions.mysql_fetch_row(_tcxMYSQL_RES* result)
in FabMySQLResult.get_fetch_row()
in GDOx-PosExplorer.Exe.Functions.MysqlDB_QueryResult(String sQuery) in C:\XporterOutput\GDOx-PosExplorer\Mysql x PosExp.prg:riga 197
in PosExplorerWin.CaricaTabelle(__Usual[] Xs$Args) in C:\XporterOutput\GDOx-PosExplorer\Form PosExplorerWin.prg:riga 1417
in PosExplorerWin.PrimoInit(__Usual[] Xs$Args) in C:\XporterOutput\GDOx-PosExplorer\Form PosExplorerWin.prg:riga 1457
in PosExplorerWin.Expose(__Usual[] Xs$Args) in C:\XporterOutput\GDOx-PosExplorer\Form PosExplorerWin.prg:riga 1440
in Vulcan.VO.Window.Dispatch(__Usual[] $args)
in VulcanVOGUIClasses.Functions.__WCDialogProc(Void* hWnd, UInt32 uMsg, UInt32 wParam, Int32 lParam)
in VulcanVOWin32APILibrary.Functions.CallWindowProc(Void* lpPrevWndFunc, Void* hwnd, UInt32 Msg, UInt32 wParam, Int32 lParam)
in bTools_bBrowser.Functions.bEventHandler(Void* hWindow, UInt32 iMessage, UInt32 iWParam, Int32 iLParam)
**************************************************************************************************


l'errore sembra generato qui:

ACCESS fetch_row
LOCAL oRow AS FabMySQLRow
LOCAL pRow AS PTR
//
SELF:__Check_pMySQL_Res( #fetch_row )
pRow := mysql_fetch_row( SELF:pmySQL_RES )
IF ( pRow != NULL_PTR )
oRow := FabMySQLRow{ SELF, pRow }
ENDIF
//
RETURN oRow

File Attachment:

File Name: GDO-00-LoadSQLlib.zip
File Size:7 KB


_DLL FUNCTION mysql_fetch_row( result AS _tcxMYSQL_RES ) AS PSZ PTR PASCAL:libmySQL.mysql_fetch_row



VOSTRUCT _tcxMYSQL_RES
MEMBER row_count AS REAL8
//
MEMBER field_count AS DWORD
MEMBER current_field AS DWORD
MEMBER fields AS _tcxMYSQL_FIELD
MEMBER data AS _tcxMYSQL_DATA
MEMBER data_cursor AS _tcxMYSQL_ROWS
MEMBER field_alloc IS _tcxMEM_ROOT
// If unbuffered read
MEMBER row AS PSZ PTR
// buffer to current row
MEMBER current_row AS PSZ PTR
// column lengths of current row
MEMBER lengths AS DWORD PTR
// for unbuffered reads
MEMBER handle AS _tcxMYSQL
// Used my mysql_fetch_row
MEMBER eof AS BYTE


Qualcuno riesce a capire dove sbaglio?

Grazie
Gianluca
Attachments:

Please Log in or Create an account to join the conversation.

Conversione Libreria di interfaccia a LibMySql.dll 1 year 3 months ago #4356

  wriedmann's Avatar wriedmann Offline Posts: 1567
Ciao Gianluca,

puntatori e .NET non vanno molto d'accordo.

Sembra che stai usando un puntatore su una struttura. In VO questo funziona, ma .NET avrà dei problemi.

La soluzione più facile sarebbe usare una libreria nativa di .NET e creare un'interfaccia tramite il programma VO e quest'ultima.

Se questo non è possibile dovrei fare delle prove.

Saluti

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
This email address is being protected from spambots. You need JavaScript enabled to view it.
www.riedmann.it - docs.xsharp.it

Please Log in or Create an account to join the conversation.

Conversione Libreria di interfaccia a LibMySql.dll 1 year 3 months ago #4357

  softdevo@tiscali.it's Avatar softdevo@tiscali.it Offline Posts: 85
Scusami ma perché non usi il Net Connector di Mysql?
Ovvero la dll MySql.Data.dll, eviteresti così "codice non gestito"

Ecco un link per approfondire il concetto di codice gestito o non gestito.
docs.microsoft.com/it-it/dotnet/standard/managed-code

Danilo

Please Log in or Create an account to join the conversation.

Conversione Libreria di interfaccia a LibMySql.dll 1 year 2 months ago #4359

  Chris's Avatar Chris Offline Posts: 1164
Ciao Gianluca,

As Danilo said, better use the dotnet classes for communication with the database, instead of using win api calls. But out of curiosity, please change your code to use REF like below, does it work this way?

(google translation: Come diceva Danilo, è meglio utilizzare le classi dotnet per la comunicazione con il database, invece di utilizzare le chiamate win api. Ma per curiosità, si prega di cambiare il codice per utilizzare REF come di seguito, funziona in questo modo?)
_DLL FUNCTION mysql_fetch_row( result REF _tcxMYSQL_RES ) AS PSZ PTR PASCAL:libmySQL.mysql_fetch_row

pRow := mysql_fetch_row( REF SELF:pmySQL_RES )

Chris
XSharp Development Team
chris(at)xsharp.eu

Please Log in or Create an account to join the conversation.

Conversione Libreria di interfaccia a LibMySql.dll 1 year 2 months ago #4360

  gianluca.pinoli's Avatar Topic Author gianluca.pinoli Offline Posts: 28
Danilo, Wolfgang,
Quello che stavo provando era un test di migrazione con il "minor sforzo possibile".
Purtroppo sembra che per la migrazione mi servirà integrare il MySql .NET Connector come mi consigliate.
Grazie ancora

Gianluca

Please Log in or Create an account to join the conversation.

Conversione Libreria di interfaccia a LibMySql.dll 1 year 2 months ago #4361

  gianluca.pinoli's Avatar Topic Author gianluca.pinoli Offline Posts: 28
Hi Chris,
I've tested my code with the suggested changes, but i get the same error.
I'll try testing Mysql .NET COnnector.

Regards
Gianluca

Please Log in or Create an account to join the conversation.

Conversione Libreria di interfaccia a LibMySql.dll 1 year 2 months ago #4364

  gianluca.pinoli's Avatar Topic Author gianluca.pinoli Offline Posts: 28
Hi Chris,
FYI, this way it seem to work:

ACCESS fetch_row
LOCAL oRow AS FabMySQLRow
LOCAL pRow AS PTR
//
SELF:__Check_pMySQL_Res( #fetch_row )
pRow := mysql_fetch_row( SELF:pmySQL_RES )
IF ( pRow != NULL_PTR )
oRow := FabMySQLRow{ SELF, pRow }
ENDIF
//
RETURN oRow

_DLL FUNCTION mysql_fetch_row( result AS _tcxMYSQL_RES ) AS PSZ PASCAL:libmySQL.mysql_fetch_row

Regards
Gianluca

Please Log in or Create an account to join the conversation.

Conversione Libreria di interfaccia a LibMySql.dll 1 year 2 months ago #4366

  Chris's Avatar Chris Offline Posts: 1164
Hi Gianluca,

Aaah, right, it was the PSZ PTR in the return type! I had not spotted this before, thanks.

Chris
XSharp Development Team
chris(at)xsharp.eu

Please Log in or Create an account to join the conversation.

  • Page:
  • 1
Moderators: wriedmann