Непоследовательная связь в VS2010 - PullRequest
0 голосов
/ 27 марта 2012

Я следовал руководству по созданию DLL C ++ / Cli, по какой-то причине я получаю предупреждение для каждого объявления функции, вот весь код:

// 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 Ответ

1 голос
/ 27 марта 2012

Заголовок объявляет импорт DLL, что означает, что определение класса происходит из DLL.Поскольку вы предоставляете определение, это дает ошибку связи.Вместо этого вы захотите использовать __declspec(dllexport) при определении DLL.

Поскольку вы захотите использовать тот же заголовочный файл в приложении, которое будет использовать DLL, часто используется следующая идиома:

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

И затем используйте:

class MYAPI KinectRecognizer

#define MYAPI_EXPORTS перед включением заголовка в DLL, но не определяйте его в приложении, используя заголовок для импорта DLL.

...