Discussione chiusa
Visualizzazione dei risultati da 1 a 2 su 2

delphi callback da c++ dll

  1. #1
    GianPiero non è in linea Novello
    Salve ragazzi sto utilizzando una DLL di un SDK per comunicare con un video recorder da cui recuperare
    spezzoni di registrazioni da diverse telecamere.
    Nessun problema in particolare nel recuperare le funzioni tramite LoadLibrary GetProcAddress FreeLibrary

    purtroppo mi sono imbattutto in alcune funzioni particolare che tra i parametri hanno un puntatore a funzione(callback).
    per quello che ho capito dovrebbe richiamare una funzione nella mia applicazione quando un particolare evento nella DLL occorre.

    una di queste funzioni e questa:

    la funzione nell file h è definita in questo modo:
    ARTC_HSERVER ARTCAPI ArtcServerCreateEx( ARTC_HSESSION hSession, LPCTSTR lpHostName, UINT nPort, ARTC_SERVERPROC pServerCallback, LPVOID pUserData );

    convertita in delphi
    ArtcServerCreateEx: function(ArtecoSessionHandle:THandle; HostName:PAnsiChar; Port:integer; pServerCallback: Pointer; pUserData:Pointer):THandle stdcall;

    questa funzione (come descritto nell'help) è possibile richiamarla anche passando un valore nullo(nil) al parametro pServerCallback ed infatti in questo modo funziona in quanto ritorna un
    handle valido al server creato.

    Ma io sarei interessato a poter usufruire della callback per conoscere lo stato del server se dovesse essere modificato, ma non so come poter definire questa callback.

    Nella SDK viene fornito anche un esempio in vc++ nell quale si vede come viene definita e passata questa callback.


    VOID ARTCCALLBACK CArtecoSdkMfcDemoDoc::fnServerCallback( ARTC_HSERVER hServer, ARTC_SERVER_STATUS nStatus, LPVOID pUserData ) {

    CArtecoSdkMfcDemoDoc* pThis = (CArtecoSdkMfcDemoDoc*)pUserData;
    ASSERT( pThis != NULL );

    pThis->ServerCallback( hServer, nStatus );
    }


    VOID CArtecoSdkMfcDemoDoc::ServerCallback( ARTC_HSERVER hServer, ARTC_SERVER_STATUS nStatus ) {

    ASSERT( hServer == m_hSvr );

    switch( nStatus ) {
    case ARTC_SVR_ONLINE:
    case ARTC_SVR_OFFLINE:
    case ARTC_SVR_LOGGEDIN:
    case ARTC_SVR_LOGGEDOUT:
    m_nStatus = nStatus;
    break;

    case ARTC_SVR_CANLOGIN:
    case ARTC_SVR_LOGINERROR:
    break;

    case ARTC_SVR_INVALID_DUPLICATED:
    case ARTC_SVR_INVALID_UNKNOWNTYPE:
    case ARTC_SVR_INVALID_TOOOLD:
    case ARTC_SVR_INVALID_TOORECENT:
    PostMessageToAllFrames( WM_CLOSE );
    return;
    }

    PostMessageToAllViews( WM_SERVERSTATUS, (WPARAM)nStatus );
    }


    e questa è la riga che la chiama
    m_hSvr = ArtcServerCreateEx( theApp.m_hSession, m_sServerAddr, m_nPort, &fnServerCallback, this );

    altre definizioni che possono essere utili nel file h

    #define ARTCCALLBACK __stdcall
    typedef VOID (ARTCCALLBACK* ARTC_SERVERPROC)( ARTC_HSERVER hServer, ARTC_SERVER_STATUS nStatus, LPVOID pUserData );


    come posso ricreare questo in delphi.
    ho cercato diversi esempi su internet , ma non sono riuscito a tirarne fuori niente ho mi da errore il compilatore o ho eccezioninell'esecuzione.
    se mi sono dimenticato qualche informazione fatemelo sapere.

    spero sinceramente che qualcuno mi aiuti

    Saluti
    GianPiero

  2. #2
    Leggi il regolamento (sezione crossposting).

    delphi callback da c++ dll

    Chiudo.
    ℹ️ Leggi di più su AntonioG ...

Discussione chiusa

Potrebbero interessarti anche ...

  1. Intercettare callback dei ribbon/shortcut menu di sistema
    Da Max.Riservo nel forum Microsoft Access
    Risposte: 10
    Ultimo Post: 18-04-2020, 21:47
  2. VB 2010 callback funzione DLL c++ 6.0
    Da mattew75 nel forum Visual Basic .Net
    Risposte: 5
    Ultimo Post: 22-09-2010, 17:16
  3. Risposte: 0
    Ultimo Post: 30-10-2008, 09:33
  4. Delphi SQL
    Da max74 nel forum Delphi
    Risposte: 1
    Ultimo Post: 27-02-2007, 21:57
  5. Delphi
    Da morpheo13 nel forum Delphi
    Risposte: 2
    Ultimo Post: 07-03-2006, 23:18