n° 219
Novembre 2017
Dicembre 13, 2017, 01:53:29 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: delphi callback da c++ dll  (Letto 2961 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
brggpr@hotmail.com
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 4


Mostra profilo
« inserita:: Ottobre 22, 2012, 07:42:22 »

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 eccezioni nell'esecuzione.
se mi sono dimenticato qualche informazione fatemelo sapere.

spero sinceramente che qualcuno mi aiuti

Saluti
GianPiero

ps
headconv non riesce a convertire correttamente il file h ma non credo sia un problema
riesco a recuperare sia tutti gli enum e le strutture e convertirle correttamente.
Registrato
brggpr@hotmail.com
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 4


Mostra profilo
« Risposta #1 inserita:: Ottobre 22, 2012, 10:12:24 »

questo significa che nessuno risponderà al mio quesito solamente perchè l'ho postato da 2 parti?
be sono dispiaciuto non è stato fatto con malizia ma per necessità.
è possibile rimediare q questo?
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines