Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Migration vers Code::Bloocks 8.02]

curieux probleme de link

    2 mars 2008 à 13:05:26

    Bonjour :)
    Une bonne nouvelle: la nouvelle version stable de C::B est enfin disponible.
    Une moins bonne: il risque d'y avoir quelques petits problemes peu documentés...

    En ce qui me concerne, j'ai migré mon projet sans trop de difficultés. Il faut faire attention à ne plus faire appel aux anciennes librairies, pour eviter des conflits de version. De petits reglages dans les preferences du projet s'imposent donc.
    Il me reste toutefois une fonction qui me donne du fil à retordre. Le plus étonnant, c'est que j'utilise plusieurs fonctions de cette librairie, et que seule celle ci refuse de compiler.
    Heureusement, il s'agit de code "de démo", que je garde sous la main en cas de besoin. Néanmoins, j'aimerais tout de même réussir à l'utiliser. Voici le code en question:
    1. #include <windows.h>
    2. HANDLE WINAPI CreateJobObject(
    3.            LPSECURITY_ATTRIBUTES lpJobAttributes,
    4.            LPCTSTR lpName
    5. );
    6. DWORD WINAPI ThreadGraph(LPVOID pParam)
    7. {
    8. LPSECURITY_ATTRIBUTES lpJobAttributes = NULL;
    9. LPCTSTR lpName = ("TestJob");
    10. HANDLE hObject;
    11. hObject = CreateJobObject(lpJobAttributes, lpName); /// c'est ici que ca coince
    12. ....


    Avec "l'ancienne" version de C::B, ca marche, je peux voir mon "job" à l'aide d'un utilitaire comme WinObjEx. Ici, je lance un thread qui va creer ce job, et effectuer quelques opérations basiques, comme entrer dans une section critiques, etc... Simple tests. Aucune librairie n'est utilisée, seul windows.h est inclus (il me semble en tout cas).
    Bref, je ne sais d'où vient ce problème. Je me demande s'il est reproductible. Est-il du à la nouvelle version de mingw (3.4.5) ?

    Sinon, le nouveau C::B est tout de même plus pratique à utiliser, pas aussi bon que je l'aurais souhaité, mais il vaut le détour !
    Merci de votre attention.
    • Partager sur Facebook
    • Partager sur Twitter
      3 mars 2008 à 17:08:04

      J'ai passé une dizaine d'heure à essayer de comprendre ce qui ne passe pas. Il a même fallu que je réinstalle la RC2, et que je passe outre le fameux "undefined reference to 'WinMain@16' " (aargl :) ).
      Et donc je peux affirmer avec dertitude que le nouveau mingw a un problème. Peut être est-il trop pointilleux ? En tout cas, le code que j'ai fourni marche avec la RC2.

      En fait la déclaration de la fonction CreateJobObject n'est pas necessaire (je m'en doutais), elle n'était là que pour que je sache de quoi elle était faite.
      Ce qui est étonnant, c'est de pouvoir utiliser d'autres fonctions de la lib kernel32.

      Ce code marche avec C::B 8.02 :
      1. #include <windows.h> //lier la librairie kernel32
      2. HANDLE ghMutex;
      3.     ghMutex = CreateMutex(
      4.         NULL,              // default security attributes
      5.         FALSE,             // initially not owned
      6.         NULL);             // unnamed mutex
      7.     CloseHandle(ghMutex);


      Je souhaiterais que quelqu'un qui soit passé au nouveau C::B essaie d'utiliser la fonction CreateJobObject. :)
      Histoire de savoir si ca vient de chez moi ou pas... Et éventuellement de faire un rapport de bug.
      Merci
      • Partager sur Facebook
      • Partager sur Twitter
        3 mars 2008 à 20:55:27

        Est-ce que tu compiles ton code en mode C++ ? Si oui, as-tu essayé d'entourer ta déclaration de la fonction "CreateJobObject" de ceci :
        1. extern "C" {
        2.     /* Ta déclaration */
        3. }


        Cela demande au décorateur de ne pas "décorer" le nom de la fonction comme cela est normalement fait en C++.

        Sinon, pour programmer avec l'API Win32, Microsoft Visual C++ 2005/2008 Express est quand même beaucoup mieux et permet d'utiliser les dernières versions du Platform SDK, et donc de la Win32 API.
        • Partager sur Facebook
        • Partager sur Twitter

        [Migration vers Code::Bloocks 8.02]

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown