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

Langage Delphi Discussion :

Déclaration de fonction


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut Déclaration de fonction
    Bonjours,
    J'aimerai pour voir coder un code C en delphi mais je bloque a un point, si vous pourriez m'aider.
    Donc voici le code en question :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include "stdafx.h" 
    #using <mscorlib.dll> 
    #include <Winsnmp.h> 
    #include <windows.h> 
    using namespace System; 
     
    SNMPAPI_STATUS CALLBACK cbFunc 
    (HSNMP_SESSION hSession, HWND hWnd, UINT wMsg, 
    WPARAM wParam, LPARAM lParam, LPVOID lpClientData) 
    {
    return (SNMPAPI_SUCCESS); 
    } 
     
    int _tmain(){ ... }

    Ce qui m'intéresse c'est la fonction cbFunc, elle est coder avant le main du C, mais en delphi quand je veut faire sa il m'envoie bouler voici mon code :
    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
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    function cbFunc(
                  hSession: HSNMP_SESSION;
                  hWnd: HWND;
                  wMsg: UINT;
                  wParam: WPARAM;
                  lParam: LPARAM;
                  lpClientData: Pointer): SNMPAPI_STATUS;stdcall;
    var
      Form1: TForm1;
    implementation
    etc...
    mais la il me dit :
    [Erreur] Unit1.pas(25): Déclaration forward ou external non satisfaite : 'call'
    Et j'ai encore un autre problème je ne sais pas comment coder se code

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    smiUINT32 sysUpTime[] = {1,3,6,1,2,1,1,3,0};

    si vous pouviez m'aider merci bien

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 871
    Points : 11 361
    Points
    11 361
    Billets dans le blog
    6
    Par défaut
    je ne suis pas sûr, mais ce qu'il faudrait serait déclarer un type de fonction ? style :
    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
     
    const  // pour déclarer un tableau initialisé
      LengthOfFormat : array[1..13] of Byte = (1,1,2,4,8,1,1,2,4,8,4,8,4);
     
    type
      TMyFunction=function(AParam: integer): Boolean;
     
    var
      MyFunction: TMyFunction;
     
    function Positif(AParam: integer): Boolean;
    begin
       Result:=AParam>0;
    end;
     
    //...
     
    begin
      MyFunction:=Positif;
      if MyFunction(-1) then ShowMessage('étonnant !');
    end;

  3. #3
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    tu dois écrire le corps de ta fonction dans la section implementation. dans la section interface tu as juste mis son prototype.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    ok je vais essayer mais la encore le return du C en delphi il est égal a quoi??? :s

    et pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    smiUINT32 sysUpTime[] = {1,3,6,1,2,1,1,3,0};
    je vais voir si ta solution marche tourlourou

  5. #5
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par kuribo Voir le message
    ok je vais essayer mais la encore le return du C en delphi il est égal a quoi??? :s
    il s'agit en C du unsigned int, tu peux donc le traduire en Cardinal sous delphi
    ps: ce fichier te sera peut-être utile : winsnmp.h

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    oui je sais que le type smiUINT32 c'est un cardinal.

    la encore je rencontre un probleme j'ai delcarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    smiUINT32 sysUpTime[] = {1,3,6,1,2,1,1,3,0};
    comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const sysUpTime : array [0..8] of smiUINT32 = (1,3,6,1,2,1,1,3,0);
    ensuite le code en C donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    smiOID dSysUpTimeName = {9, sysUpTime};
    la encore je n'arrive pas a traduire sa en C, smiOID est une structure
    avec une longueur et un ptr

    donc je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dSysUpTimeName.len:=9;
    dSysUpTimeName.ptr:=sysuptime;
    mai j'ai une erreur avec le .ptr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Erreur] Unit1.pas(69): Types incompatibles : 'Array' et 'smiLPUINT32'
    Oui j'utilise le winsnmp.h mais je galère a mort pour utiliser les methodes de l'API snmp je n'arrive pas trop a comprendre lesquels utiliser pour mon programme...

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par kuribo Voir le message
    oui je sais que le type smiUINT32 c'est un cardinal.
    j'avais mal compris alors. return du C c'est Result de delphi
    en C
    en delphi
    pour le reste ce fichier WinSnmp.pas qui se trouve ici t'aidera dans ta traduction des types.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Merci, oui j'utilise déjà se WinSnmp.pas mais c'est plutôt dans les paramètre des méthodes et fct etc, qui est dur quand on utilise pour la 1er fois cette API...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    à tout hasard si vous connaissez pas déjà,
    j'ai dans mes bookmarks un article sur le sujet de la conversion des headers C/C++ vers delphi trés intéressant car plein d'exemples :

    http://rvelthuis.de/articles/articles-convert.html

  10. #10
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
     
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    //Ajouter pour eviter l'erreur tu doit declacer ces type
    type HSNMP_SESSION = integer; 
    type SNMPAPI_STATUS = integer;
    ////////////////////////////////////////////////////////////
    function cbFunc(
    hSession: HSNMP_SESSION;
    hWnd: HWND;
    wMsg: UINT;
    wParam: WPARAM;
    lParam: LPARAM;
    lpClientData: Pointer): SNMPAPI_STATUS;stdcall;
     
    var
      Form1: TForm1;
    implementation
     
    {$R *.dfm}
     function cbFunc(
    hSession: HSNMP_SESSION;
    hWnd: HWND;
    wMsg: UINT;
    wParam: WPARAM;
    lParam: LPARAM;
    lpClientData: Pointer): SNMPAPI_STATUS;stdcall;
    begin
    result:=0
    end  ;
     
     
    end.
    ça va prodiure cet erreur de declaration
    [Erreur] Unit1.pas(17): Identificateur non déclaré : 'HSNMP_SESSION'
    [Erreur] Unit1.pas(22): Identificateur non déclaré : 'SNMPAPI_STATUS'
    [Erreur fatale] Project1.dpr(5): Impossible de compiler l'unité utilisée 'Unit1.pas'

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    oui car HSNMP_SESSION et SNMPAPI_STATUS sont des constantes de l'API snmp elle sont declarer dans WinSnmp.pas qui se trouve ici http://imul.org/snmp/ mais c'est quand même assez complexe delphi et snmp sa fait pas bon ménage :p

  12. #12
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Ça fait bon ménage avec le TIdSnmp de Indy, mais c'est au format snmp V1.
    Pour le V3, il faut effectivement winsnmp, mais ce serait donc le bordel à gérer avec Delphi alors ? Et pourquoi ?
    A t'on quelque part un bout de code permettant d'exploiter cette API Windows avec Delphi ?
    Merci.

    NB : je suis en Delphi 7, des fois que ça pose un problème avec l'API winsnmp (?).

Discussions similaires

  1. Déclaration de fonction dans le "main".
    Par Pragmateek dans le forum C++
    Réponses: 14
    Dernier message: 23/06/2006, 19h32
  2. déclaration de fonctions externes
    Par poukill dans le forum C++
    Réponses: 40
    Dernier message: 17/05/2006, 16h15
  3. Réponses: 4
    Dernier message: 11/05/2006, 15h34
  4. Réponses: 6
    Dernier message: 20/11/2005, 02h53
  5. [JS] Problème déclaration de fonction
    Par glloq8 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/09/2005, 10h22

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