TAPI et erreur de linkage

TAPI et erreur de linkage - C++ - Programmation

Marsh Posté le 10-06-2003 à 14:48:27    

Salut,
 
Voilà j'essaie de faire un soft utilisant TAPI (Telephony API) en C++, et lorsque j'essaie de compiler, j'ai des erreurs de link :  

Code :
  1. --------------------Configuration: TAPIConsole - Win32 Debug--------------------
  2. Compiling...
  3. main.cpp
  4. Linking...
  5. LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library
  6. main.obj : error LNK2001: unresolved external symbol "protected: int __thiscall CTapiConnection::HandleLineErr(long)" (?HandleLineErr@CTapiConnection@@IAEHJ@Z)
  7. main.obj : error LNK2001: unresolved external symbol "public: static void __stdcall CTapiConnection::lineCallbackFunc(unsigned long,unsigned long,unsigned long,unsigned long,unsigned long,unsigned long)" (?lineCallbackFunc@CTapiConnection@@SGXKKKKKK
  8. @Z)
  9. libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
  10. Debug/TAPIConsole.exe : fatal error LNK1120: 3 unresolved externals
  11. Error executing link.exe.
  12. TAPIConsole.exe - 4 error(s), 1 warning(s)


 
Le soft utilise aussi afxwin.h, qui est une grosse usine à gaz et m'a obligé à passer en multithreaded... C'est en grande partir un prog d'exemple que j'ai récupéré de la msdn, alors je suis à peu près sûr qu'il y a pas d'erreur de code :)  
 
Merci d'avance :)

Reply

Marsh Posté le 10-06-2003 à 14:48:27   

Reply

Marsh Posté le 10-06-2003 à 14:53:55    

Il faut que tu dises à ton compilo ou se trouve ta lib...il a pas l'air de savoir où elle se cache!


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-06-2003 à 14:56:04    

ben j'ai rajouté tapi32.lib, normalement ça suffit... à moins qu'il en faille une autre pour afxwin ?

Reply

Marsh Posté le 10-06-2003 à 14:57:14    

pilou51 a écrit :

ben j'ai rajouté tapi32.lib, normalement ça suffit... à moins qu'il en faille une autre pour afxwin ?


Euh là aucune idée, j'y connais rien en prog windoze...je passe! :whistle:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-06-2003 à 14:57:39    

hihi oki merci qd mm:)

Reply

Marsh Posté le 10-06-2003 à 15:57:35    

tu travaille sous Visual ?
si oui, regarde si tu as bien ajouté tapi32.lib dans les Projects Settings ou alors utilise un pragma comment.

Reply

Marsh Posté le 10-06-2003 à 16:07:31    

Je suis sous Visual 6.0 oui...
J'ai bien mis le tapi32.lib dans les projet settings...  
 
euh et pragma comment, le mot me rappelle vaguement qqchose, mais ça semble loin, tu peux me rafraichir la mémoire stp ? :)

Reply

Marsh Posté le 10-06-2003 à 16:09:26    

alors ca doit etre :
 
 

Code :
  1. #pragma comment (lib,"tapi32,lib" )

 
 
au debut d'un de test headers.
ca effectue le linkage avec tapi32.lib au moment de la compil. C'est pratique pour ca :
 
 

Code :
  1. #ifdef OPTION_1
  2. #pragma comment (lib,"malibavecoption-1.lib" )
  3. #else
  4. #pragma comment (lib,"malibsansoption-1.lib" )
  5. #endif

Reply

Marsh Posté le 10-06-2003 à 16:12:26    

mais ça revient au mm qu'en ajoutant la lib ds les projet settings (à part si on a des #ifdef, je suis bien d'accord :))...
bref plouf, la lib est bien chargée, mais ça suffit pas :(

Reply

Marsh Posté le 10-06-2003 à 16:14:27    

verifie que la lib existe et qu'elle est pas dans un rpeertoire tordue.

Reply

Marsh Posté le 10-06-2003 à 16:14:27   

Reply

Marsh Posté le 10-06-2003 à 16:18:00    

non non elle est avec toutes les autres, d'ailleurs il met un msg d'erreur si on essaie de charger une lib inexistante....
 
ouiiiiiinnn ça m'énerve... :cry:
 
mais merci d'essayer, c sympa :)

Reply

Marsh Posté le 10-06-2003 à 16:19:13    

Tu as bein sur ajouter la lib dans les DEUX versions des settings release ET Debug.
Paske si tu l'a mis dans debug et que tu compile en release ...

Reply

Marsh Posté le 10-06-2003 à 16:21:57    

vivi...
d'ailleurs si j'enlève la lib, j'ai 6 erreurs de link au lieu de 4...

Reply

Marsh Posté le 10-06-2003 à 17:33:52    

Euh les erreurs de link les 2 premieres ca a rien avoir avec des fonctions propre a tapi32.lib mais c ds ton code.

Reply

Marsh Posté le 11-06-2003 à 08:37:49    

Et tu pourrais me dire de quel genre d'erreur il peut s'agir ds le code ? Comme dit plus haut, je l'ai récupéré, et je peux pas tout copier/coller ici parceque c plutot long... Mais si tu pouvais m'en dire plus sur le genre de faute qui peut provoquer ça... je t'en serais infiniment reconnaissant :)

Reply

Marsh Posté le 11-06-2003 à 09:38:15    

Ben la les 2 fonctions qui link pas c a vue de nez les 2 callback que tu peux passer a TAPI pour les notifications.
 
Hors tu les as (enfin le soft) integrees a une classe, mais pour faire soit faut qu elles soit declarees en static.
 
Enfin ca peut venir de la sans le code dur

Reply

Marsh Posté le 11-06-2003 à 10:52:33    

Elles sont en static justement, j'ai essayé de l'enlever et ça rajoute effectivement des erreurs.....
Bon voilà le bout de code de définition de ces méthodes :  

Code :
  1. class CTapiConnection
  2. {
  3. protected:
  4.     // This area contains the protected members of the CTapiConnection class.
  5.     DWORD m_dwNumDevs;      // the number of line devices available
  6.     DWORD m_dwDeviceID;     // the line device ID
  7.     DWORD m_dwRequestedID;
  8.     LONG m_lAsyncReply;
  9.     // BOOLEANS to handle reentrancy.
  10.     BOOL m_bShuttingDown;
  11.     BOOL m_bStoppingCall;
  12.     BOOL m_bInitializing;
  13.     BOOL m_bReplyReceived;
  14.     BOOL m_bTapiInUse;     // whether TAPI is in use or not
  15.     BOOL m_bInitialized;   // whether TAPI has been initialized
  16. public:
  17.     // This area contains the public members of the CTapiConnection class.
  18.     HLINEAPP m_hLineApp;       // the usage handle of this application for TAPI
  19.     HCALL m_hCall;             // handle to the call
  20.     HLINE m_hLine;             // handle to the open line
  21.     DWORD m_dwAPIVersion;      // the API version
  22.     char m_szPhoneNumber[64];  // the phone number to call
  23. protected:
  24.     // Here is where I put the protected (internal) functions.
  25. BOOL ShutdownTAPI();
  26.     BOOL HandleLineErr(long lLineErr);
  27.     LPLINEDEVCAPS GetDeviceLine(DWORD *dwAPIVersion,
  28.         LPLINEDEVCAPS lpLineDevCaps);
  29.     LPLINEDEVCAPS MylineGetDevCaps(LPLINEDEVCAPS lpLineDevCaps,
  30.         DWORD dwDeviceID, DWORD dwAPIVersion);
  31.     LPVOID CheckAndReAllocBuffer(LPVOID lpBuffer, size_t sizeBufferMinimum);
  32.     LPLINEADDRESSCAPS MylineGetAddressCaps (LPLINEADDRESSCAPS lpLineAddressCaps,
  33.         DWORD dwDeviceID, DWORD dwAddressID, DWORD dwAPIVersion,
  34.         DWORD dwExtVersion);
  35.     BOOL MakeTheCall(LPLINEDEVCAPS lpLineDevCaps,LPCSTR lpszAddress);
  36.     LPLINECALLPARAMS CreateCallParams (LPLINECALLPARAMS lpCallParams,
  37.         LPCSTR lpszDisplayableAddress);
  38.     long WaitForReply (long lRequestID);
  39.     void HandleLineCallState(DWORD dwDevice, DWORD dwMessage,
  40.         DWORD dwCallbackInstance,
  41.         DWORD dwParam1, DWORD dwParam2, DWORD dwParam3);
  42. private:
  43.    // This section is for private functions.
  44. public:
  45.     // Public functions.
  46.     CTapiConnection();
  47.     ~CTapiConnection();
  48.     BOOL Create(char *szPhoneNumber = NULL);
  49.     BOOL DialCall(char *szPhoneNumber = NULL);
  50.     BOOL HangupCall();
  51.     static void CALLBACK lineCallbackFunc(
  52.         DWORD dwDevice, DWORD dwMsg, DWORD dwCallbackInstance,
  53.         DWORD dwParam1, DWORD dwParam2, DWORD dwParam3);
  54. };


 
Quand je vire leurs appels ultérieurs, je n'ai plus d'erreur de link.....

Reply

Marsh Posté le 11-06-2003 à 12:18:55    

Voici quelques hypothèses :
 

Code :
  1. --------------------Configuration: TAPIConsole - Win32 Debug--------------------
  2. Compiling...
  3. main.cpp
  4. Linking...
  5. LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library // cela indique que tu utilises la bibliothèque C MultiThreaded et que dans une autre bibliothèque (Tapi32.lib ?), c'est une autre bibliothèque C (Single threaded, debug...) qui est utilisée.
  6. main.obj : error LNK2001: unresolved external symbol "protected: int __thiscall CTapiConnection::HandleLineErr(long)" (?HandleLineErr@CTapiConnection@@IAEHJ@Z) // il trouve pas ta fonction... Tu es sûr de l'avoir implémentée et d'avoir ajouté le fichier .c ou .cpp la contenant au projet ?
  7. main.obj : error LNK2001: unresolved external symbol "public: static void __stdcall CTapiConnection::lineCallbackFunc(unsigned long,unsigned long,unsigned long,unsigned long,unsigned long,unsigned long)" (?lineCallbackFunc@CTapiConnection@@SGXKKKKKK
  8. @Z) // même erreur qu'au dessus
  9. libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main // la bibliothèque C que tu utilise a besoin de la fonction _main et ne la trouve pas. Ca ressemble aux erreurs que tu as quand tu compiles un projet utilisant la bibliothèque C en ayant défini ATL_MIN_CRT dans les options du projet.
  10. Debug/TAPIConsole.exe : fatal error LNK1120: 3 unresolved externals
  11. Error executing link.exe.
  12. TAPIConsole.exe - 4 error(s), 1 warning(s)



---------------
each day I don't die is cheating
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed