2012-03-27 11 views
0

Ich war nach einer Anleitung, wie eine C++/Cli DLL aus irgendeinem Grund zu schaffen, bekomme ich eine Warnung für jede Funktionsdeklaration, hier ist der gesamte Code:Uneinheitliche Linkage in 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; 
} 

Hier sind die Fehlerausgänge:

http://pastie.org/3678144

I kompiliere ich mit dem/clr Flag.

Antwort

1

Der Header deklariert DLL-Import, was bedeutet, dass die Definition der Klasse von einer DLL stammt. Da Sie die Definition bereitstellen, wird der Verknüpfungsfehler angezeigt. Sie sollten stattdessen __declspec(dllexport) verwenden, wenn Sie die DLL definieren.

Da Sie die gleiche Header-Datei in der App verwenden möchten, die die DLL verwenden, wird die folgende Idiom häufig verwendet:

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

Und dann verwenden:

class MYAPI KinectRecognizer 

#define MYAPI_EXPORTS bevor Sie den Header in die DLL einfügen, aber definieren Sie ihn nicht in der Anwendung, indem Sie den Header zum Importieren der DLL verwenden.

+0

Das hat es gelöst, danke. Ich habe mir die Freiheit genommen, MYAPI_EXPORTS zum Präprozessor des Projekts hinzuzufügen, das sich um den Aufbau der Bibliothek kümmert. Noch einmal Danke. –