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:GDOshopPosExplorerGDOx-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:XporterOutputGDOx-PosExplorerMysql x PosExp.prg:riga 197
in PosExplorerWin.CaricaTabelle(__Usual[] Xs$Args) in C:XporterOutputGDOx-PosExplorerForm PosExplorerWin.prg:riga 1417
in PosExplorerWin.PrimoInit(__Usual[] Xs$Args) in C:XporterOutputGDOx-PosExplorerForm PosExplorerWin.prg:riga 1457
in PosExplorerWin.Expose(__Usual[] Xs$Args) in C:XporterOutputGDOx-PosExplorerForm 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
_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
Conversione Libreria di interfaccia a LibMySql.dll
Moderator: wriedmann
- gianluca.pinoli
- Posts: 36
- Joined: Mon Nov 02, 2015 1:13 pm
- Location: Italy
Conversione Libreria di interfaccia a LibMySql.dll
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
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
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
- softdevo@tiscali.it
- Posts: 191
- Joined: Wed Sep 30, 2015 1:30 pm
Conversione Libreria di interfaccia a LibMySql.dll
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.
https://docs.microsoft.com/it-it/dotnet ... naged-code
Danilo
Ovvero la dll MySql.Data.dll, eviteresti così "codice non gestito"
Ecco un link per approfondire il concetto di codice gestito o non gestito.
https://docs.microsoft.com/it-it/dotnet ... naged-code
Danilo
Conversione Libreria di interfaccia a LibMySql.dll
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?)
Chris
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?)
Code: Select all
_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 Pyrgas
XSharp Development Team
chris(at)xsharp.eu
XSharp Development Team
chris(at)xsharp.eu
- gianluca.pinoli
- Posts: 36
- Joined: Mon Nov 02, 2015 1:13 pm
- Location: Italy
Conversione Libreria di interfaccia a LibMySql.dll
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
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
- gianluca.pinoli
- Posts: 36
- Joined: Mon Nov 02, 2015 1:13 pm
- Location: Italy
Conversione Libreria di interfaccia a LibMySql.dll
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
I've tested my code with the suggested changes, but i get the same error.
I'll try testing Mysql .NET COnnector.
Regards
Gianluca
- gianluca.pinoli
- Posts: 36
- Joined: Mon Nov 02, 2015 1:13 pm
- Location: Italy
Conversione Libreria di interfaccia a LibMySql.dll
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
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
Conversione Libreria di interfaccia a LibMySql.dll
Hi Gianluca,
Aaah, right, it was the PSZ PTR in the return type! I had not spotted this before, thanks.
Chris
Aaah, right, it was the PSZ PTR in the return type! I had not spotted this before, thanks.
Chris
Chris Pyrgas
XSharp Development Team
chris(at)xsharp.eu
XSharp Development Team
chris(at)xsharp.eu