2009-06-30 3 views
0

Cela pourrait être un peu Qt spécifique, mais on y va ...Appel de fonctions dans la bibliothèque C externe à partir d'une application Qt (win32)

J'ai une application Qt que je dois l'interface avec un couple des bibliothèques externes écrites en C. Tout semble fonctionner, car je peux lier correctement, mais quand j'essaie d'appeler n'importe quelle fonction dans l'une des bibliothèques, je reçois toujours une erreur de violation d'accès. Pour l'autre bibliothèque, j'appelle comme 10 fonctions dans mon processus, mais le 11ème me donne la même chose. Je vais donner les détails pour le premier ici car je pense qu'il devrait être plus évident ce qui ne va pas.

La bibliothèque est livrée avec .lib, .h et installe un .dll à system32. Voici une déclaration de fonction de la .h:

__declspec(dllimport) unsigned short InPortB(unsigned long Port); 

La bibliothèque est livré avec une carte IO numérique que vous utilisez cette fonction pour écrire des données. Le port est l'adresse de la carte. Je sais que l'adresse est 0xdeb0 et je peux vérifier que l'écriture à cette adresse est valide parce que le code échantillon que j'ai obtenu avec la carte le fait sans erreurs. L'exemple de code que je reçois est une solution C++ VS2005. Je peux le construire et tout va bien. Lorsque j'essaie de copier l'exemple de code dans mon application Qt, j'obtiens la violation d'accès. Donc, j'ai d'abord pensé qu'il y avait une incompatibilité avec les conventions d'appel, mais je ne vois pas comment l'application lierait si c'était le cas.

Je viens de regarder l'exe de mon application en dépend et c'est un peu étrange. Il semble que mon application n'appelle aucune des fonctions de la bibliothèque externe. En outre, lorsque je vois la sortie de débogage du message d'erreur Windows, je ne vois pas la DLL chargée n'importe où.

Dois-je charger manuellement une DLL? Je n'ai rien à faire de la DLL lors de l'exécution du projet de studio visuel, ce qui n'a aucun sens pour moi. Je suis assez perdu ici.

+0

Avez-vous pris la peine de l'exécuter sous le débogueur et de voir ce qui se passe? Il devrait être facile d'obtenir la trace de la pile lorsque l'erreur de violation d'accès se produit. Et BTW, il est écrit comme "Qt", pas "QT". –

Répondre

0

Vérifiez que l'autre bibliothèque est construite dans le même environnement d'exécution que Qt et votre application (débogage/édition, principalement).