IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Type d'argument pour appel de fonction dans une DLL


Sujet :

API, COM et SDKs Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Points : 31
    Points
    31
    Par défaut Type d'argument pour appel de fonction dans une DLL
    Bonjour a tous,

    J'essaye de porter une petite application C# en Delphi, celle-ci fait appel a des fonctions dans une DLL en C++. Pour une des fonctions je n'arrive pas a déterminer le type d'argument en Delphi a passer. La fonction C++ est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    NDISMONLIB_API BOOL StartLogging(LPTSTR pszAdapterName,PLOG_RECORD_CALLBACK LogRecordCallback, HANDLE StopLoggingEvent)
    {
    	if( (!pszAdapterName) || (StopLoggingEvent == NULL) )
    	{
    		return( FALSE );
    	}
     
    	PTHREAD_CONTEXT ThreadData = new THREAD_CONTEXT();
    	ThreadData->LogRecordCallback = LogRecordCallback;
    	ULONG AdapterNameLength = wcslen(pszAdapterName);
    	ThreadData->AdapterName = new WCHAR[AdapterNameLength + 1];
    	CopyMemory(ThreadData->AdapterName,pszAdapterName,AdapterNameLength*sizeof(WCHAR));
    	ThreadData->AdapterName[AdapterNameLength] = NULL;
     
    	ThreadData->StopLoggingEvent = StopLoggingEvent;
     
    	HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RetrieveLogRecordsThread, ThreadData, 0, NULL);
    	if ( hThread == NULL )
    	{
    		return FALSE;
    	}
     
    	return TRUE;
    }
    L'appel de cette fonction en C# se fait de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
           private void button1_Click(object sender, EventArgs e)
            {
                NdisMonLib.StartLogging(comboBox1.Text, CallbackProcedure, StopEvent.SafeWaitHandle);
            }
    Savez vous vous quel est le paramètre a passer en Delphi, équivalent a StopEvent.SafeWaitHandle en C# qui semble etre un "handle en C++" ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 581
    Points : 25 239
    Points
    25 239
    Par défaut
    Delphi est pourtant plus proche du C++ que du C#

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    NDISMONLIB_API BOOL StartLogging(LPTSTR pszAdapterName,PLOG_RECORD_CALLBACK LogRecordCallback, HANDLE StopLoggingEvent)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function StartLogging(pszAdapterName: PChar; LogRecordCallback: PLOG_RECORD_CALLBACK; StopLoggingEvent: THandle); LongBool; stdcall;
    PChar, PAnsiChar, PUnicodeChar, je te laisse choisir selon ta version de Delphi et ce qu'utilise la DLL

    StopLoggingEvent doit être un Event créé par CreateEvent (voir aussi WaitForSingleObject), cela semble être le plus ressemblant à SafeWaitHandle

    Il aurait été interessant de voir comment est utilisé ThreadData->StopLoggingEvent dans la fonction RetrieveLogRecordsThread

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Merci ShaiLeTroll, mais d'ou vient le THandle ? il faut passer celui de l'appli ?

    Cordialement

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 581
    Points : 25 239
    Points
    25 239
    Par défaut
    Tu as le source de la DLL !
    Tu devrais pouvoir y répondre en lisant le code !
    C'est spécifique à cette DLL, cela n'a rien de standard !
    Ce THREAD_CONTEXT même si cela pourrait ressembler à une structure Windows, c'est un code qui a été écrit par l'auteur de la DLL, contacte-le !

    EDIT, il est clair que c'est Handle qui doit supporter le multi-thread, faut chercher autour des Sémphaores, SectionCritique ou autre Event
    Normalement si tu regarde les fonctions qui utilise "ThreadData->StopLoggingEvent", tu devrais savoir à quoi cela correspond !

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/09/2012, 10h12
  2. [WD15] Appel de fonctions dans une DLL
    Par thierrybatlle dans le forum WinDev
    Réponses: 11
    Dernier message: 12/02/2010, 01h46
  3. Appel de fonction dans une DLL
    Par vtk37 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/04/2009, 08h58
  4. probleme appel de fonction dans une DLL
    Par sylvain.cool dans le forum C++
    Réponses: 12
    Dernier message: 19/06/2008, 17h00
  5. Appel de fonction dans une page JSP
    Par Addouna dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/03/2006, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo