VS2010中的链接不一致

时间:2012-03-27 13:48:55

标签: c++ dll c++-cli clr

我正在学习如何创建C ++ / Cli DLL的教程,出于某种原因,我得到了每个函数声明的警告,这里是整个代码:

// 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;
}

以下是错误输出:

http://pastie.org/3678144

我正在使用/ clr标志进行编译。

1 个答案:

答案 0 :(得分:1)

标头声明DLL导入,这意味着类的定义来自DLL。由于您提供了定义,因此会出现链接错误。在定义DLL时,您将需要使用__declspec(dllexport)

由于您将要在将使用DLL的应用程序中使用相同的头文件,因此通常使用以下习惯用法:

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

然后使用:

class MYAPI KinectRecognizer
在将标头包含在DLL中之前

#define MYAPI_EXPORTS,但不要在应用程序中使用标头导入DLL来定义它。