Проблема с импортом функций из DLL C++. ЛНК 2001

У меня есть два проекта. Один создает DLL, а другой должен использовать функции, объявленные в DLL, но у меня проблемы с реализацией этого.

В проекте DLL у меня есть следующие объявления:

using namespace XClass;

extern "C" __declspec(dllexport) int Compute(XClass::XClassInput input, XClassOutput &XClassOutput);

extern "C" __declspec(dllexport) int Init( string configFileName);

class xclass
{

public:
    xclass(void);
    xclass(constellation &Constellation, XClass::XClassConfig &XClassConfig);

    void   ComputeWeightingMatrix(constellation &xclass_constellation, char flagIntCont);
    void   ComputeGMatrix(constellation &Constellation, XClass::XClassInput &input);

private:
    int _numberOfSystemStates;
};

В проекте, который должен использовать функции DLL, у меня есть это:

int _tmain(int argc, _TCHAR* argv[])
{

    XClass::XClassConfig xClassConfig;
    XClassOutput xClassOutput;

    XClass::XClassInput input;

    init(input, xClassOutput ); 

    constellation* class_constellation = new constellation(input, xClassConfig);

    xclass* algorithm = new xclass(*xclass_constellation, xClassConfig);


     algorithm->ComputeWeightingMatrix(*xclass_constellation,  'i');


    return 0;
}

Код для функции ComputeWeighting Matrix:

    void xclass::ComputeWeightingMatrix(constellation &Constellation, char flagIntCont)
    {
        double sigma = 0.0;
        long error;

            ...
    }

Когда я пытаюсь построить, я получаю его:

ошибка LNK2001: неразрешенный внешний символ "public: void __thiscall xclass::ComputeWeightingMatrix (созвездие классов &, char)" (?ComputeWeightingMatrix@xclass@@$$FQAEXAAVconstellation@@D@Z)


person DCuser    schedule 17.07.2013    source источник
comment
Итак, где ваш код для xclass::ComputeWeightingMatrix?   -  person Mats Petersson    schedule 17.07.2013
comment
Актуально ли содержание функции? или просто его декларация?   -  person DCuser    schedule 17.07.2013
comment
Где его определение и как вы строите код? ]   -  person Mats Petersson    schedule 17.07.2013
comment
Я отредактировал сообщение, чтобы показать как объявление, так и определение. Что касается здания, я добавил в качестве ссылки проект DLL в проект, вызывающий DLL. Это то, что вы имеете в виду?   -  person DCuser    schedule 17.07.2013
comment
Итак, вы ссылаетесь на файл .lib для xclass DLL?   -  person Mats Petersson    schedule 17.07.2013
comment
Я хочу иметь возможность вызывать из отдельного проекта функцию ComputeWeightingMatrix, которая находится в DLL. Я что-то пропустил? Я немного смущен внешним использованием. Должен ли я помечать все функции в проекте DLL как внешние, если я хочу, чтобы они были доступны в другом проекте?   -  person DCuser    schedule 17.07.2013
comment
Чтобы использовать DLL (как прямой код, как вы делаете здесь), вам нужно связать с библиотекой-заглушкой, которая содержит функцию-заглушку (как правило, одну инструкцию перехода), которая при загрузке DLL содержит фактический адрес DLL. функция. Вам нужно указать библиотеку-заглушку как часть вашей сборки.   -  person Mats Petersson    schedule 17.07.2013
comment
давайте продолжим это обсуждение в чате   -  person DCuser    schedule 17.07.2013


Ответы (1)


После некоторого обсуждения в чате выясняется, что решение этой проблемы состоит из двух частей:

  1. Необходимо использовать библиотеку-заглушку из класса DLL.
  2. Необходимо использовать class __declspec(dllexport) XClass, чтобы обеспечить экспорт функциональности из класса.
person Mats Petersson    schedule 17.07.2013