2012-03-27 6 views
0

je suivais un tutoriel sur la façon de créer un C++/Cli DLL, pour une raison quelconque, je reçois un avertissement pour chaque déclaration de fonction, voici le code complet:Incohérence liaison dans VS2010

// KRecognizer.h 

#pragma once 

namespace KR 
{ 
    class __declspec(dllimport) KinectRecognizer 
    { 
     public: 
      KinectRecognizer(); 
      ~KinectRecognizer(); 
      int Display(); 
    }; 
} 

_

// KRecognizer.cpp 
#include "stdafx.h" 
#include "KRecognizer.h" 

using namespace System; 

KR::KinectRecognizer::KinectRecognizer() 
{ 
} 

KR::KinectRecognizer::~KinectRecognizer() 
{ 
} 

int 
KR::KinectRecognizer::Display() 
{ 
    Console::WriteLine(L"Writing a line"); 
    return 100; 
} 

Voici les sorties d'erreur:

http://pastie.org/3678144

I suis en train de compiler avec le drapeau/clr.

Répondre

1

L'en-tête déclare l'importation de la DLL, ce qui signifie que la définition de la classe provient d'une DLL. Puisque vous fournissez la définition, cela donne l'erreur de liaison. Vous devrez utiliser __declspec(dllexport) au lieu de définir la DLL.

Puisque vous voulez utiliser le même fichier d'en-tête dans l'application qui utilisera la DLL, l'idiome suivant est souvent utilisé:

#ifdef MYAPI_EXPORTS 
# define MYAPI __declspec(dllexport) 
#else 
# define MYAPI __declspec(dllimport) 
#endif 

Et puis utilisez:

class MYAPI KinectRecognizer 

#define MYAPI_EXPORTS avant d'inclure l'en-tête dans la DLL, mais ne le définissez pas dans l'application en utilisant l'en-tête pour importer la DLL.

+0

Cela a résolu, merci. J'ai pris la liberté d'ajouter MYAPI_EXPORTS au préprocesseur du projet qui s'occupe de construire la bibliothèque. Merci encore. –