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

TOPIC:

Conversione Libreria di interfaccia a LibMySql.dll 20 Mar 2018 12:54 #4355

  • gianluca.pinoli
  • gianluca.pinoli's Avatar
  • Topic Author


  • Posts: 35
  • 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

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

    Conversione Libreria di interfaccia a LibMySql.dll 20 Mar 2018 13:40 #4356

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3245
  • 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

    www.riedmann.it - docs.xsharp.it

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

    Conversione Libreria di interfaccia a LibMySql.dll 20 Mar 2018 13:46 #4357

    • softdevo@tiscali.it's Avatar


  • Posts: 174
  • 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 20 Mar 2018 16:17 #4359

    • Chris
    • Chris's Avatar


  • Posts: 3750
  • 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 20 Mar 2018 16:54 #4360

    • gianluca.pinoli
    • gianluca.pinoli's Avatar
    • Topic Author


  • Posts: 35
  • 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 20 Mar 2018 16:57 #4361

    • gianluca.pinoli
    • gianluca.pinoli's Avatar
    • Topic Author


  • Posts: 35
  • 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 20 Mar 2018 18:53 #4364

    • gianluca.pinoli
    • gianluca.pinoli's Avatar
    • Topic Author


  • Posts: 35
  • 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 20 Mar 2018 20:40 #4366

    • Chris
    • Chris's Avatar


  • Posts: 3750
  • 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