J'ai une DLL (example.dll
) construit en C qui a cette fonction en elle:Pourquoi la méthode de ma bibliothèque externe ne sera-t-elle pas résolue?
void WINAPI free_job()
{
lc_free_job(jobPtr);
}
J'ai construit cette DLL et Linked example.lib
dans mon projet Visual C++. Maintenant j'essaye d'appeler la méthode free_job()
à partir d'un projet ATL avec un simple objet COM. Voici une partie de ma tête qui fait référence à la bibliothèque:
#include "..\lib\example.h"
C'est là que je l'appelle dans ma mise en œuvre:
STDMETHODIMP CCerberusSession::Free(CHAR* licensePath, CerberusErrorDetails* error)
{
free_job();
return S_OK;
}
Il ne compilera pas. Je reçois les erreurs suivantes:
Error LNK2019 unresolved external symbol "void __stdcall free_job(void)" ([email protected]@YGXXZ) referenced in function "public: virtual long __stdcall CCerberusSession::Free(char *,struct CerberusErrorDetails *)" ([email protected]@@[email protected]@@Z)
Qu'est-ce que je fais mal et comment puis-je le dépanner ou le réparer? Toutes les idées seraient utiles et appréciées.
Modifier: J'ai essayé d'envelopper le comprennent comme ceci:
extern "C" {
#include "..\lib\example.h"
}
Mais je reçois l'erreur suivante si je tente de compiler comme ceci:
Error MSB8011 Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.
Je courais Visual Studio en tant qu'administrateur. Quoi d'autre pourrait être mauvais ici?
Compile très bien, il ne lie pas. Notez le manchonnage du nom C++ dans le message d'erreur de l'éditeur de liens. Les identifiants C ne sont pas censés être mutilés. Vous avez besoin de 'extern 'C" {} 'autour de ce #include. –
@HansPassant Merci Hans. Si j'emballe l'include, je vois maintenant une erreur différente: 'Erreur MSB8011 Impossible d'enregistrer la sortie. Essayez d'activer la redirection par utilisateur ou enregistrez le composant à partir d'une invite de commande avec des autorisations élevées. J'ai modifié la question. Des idées sur quoi d'autre pourrait être le problème ici? Je ne suis pas sûr mais, cela a-t-il quelque chose à voir avec le fait qu'il s'agisse d'un projet ATL et qu'il ne parvient pas à enregistrer la sortie sur le système? Cela a-t-il quelque chose à voir avec le fait qu'il ne soit pas capable de résoudre la DLL incluse? Toutes les idées seraient d'une grande aide. – Alexandru
Question complètement différente bien sûr. Aucune idée de ce que signifie "autorisations élevées"? Il google très bien, essayez de ne pas être sans défense. –