c ++ одно решение ошибка связывания двух проектов (exe & amp; dll)

У меня есть одно решение Visual Studio, которое состоит из двух проектов Win32: 1) приложение (.exe) 2) функции оболочки (.dll).

Решение находится на стадии создания прототипа, поэтому все классы / функциональные возможности реализованы в проекте (.exe) — грязный, но быстрый и простой для отладки / тестирования.

Я начал писать оболочку DLL, чтобы «поиграть» с функциональностью в MSExcel / VBA и столкнулся с ошибкой компоновки

error LNK2019: unresolved external symbol "public: __thiscall Date::Date(int,int,int)" (??0Date@@QAE@HHH@Z) referenced in function addNumbers

Заголовочный файл DLL:

#ifdef LIBRARYWRAP_EXPORTS
#define LIBRARYWRAP_API __declspec(dllexport)
#else
#define LIBRARYWRAP_API __declspec(dllimport)
#endif

LIBRARYWRAP_API int _stdcall addNumbers(int a, int b);

Исходный файл DLL:

#include "..\applicationProject\Date.h"
class Date;
LIBRARYWRAP_API int _stdcall addNumbers(int a, int b){
Date dummyDate(12,1,2014); // <- Linker error LNK2019.
return (a+b);
}

Учебный класс Date и конструктор Date::Date(int,int,int) определены в проекте приложения (.exe) в пределах Date.h, Date.cpp,

Что я уже пытался сделать:

  1. для проекта librarywrap добавлена ​​новая ссылка. Project -> Properties -> Common -> Add New Reference, Выбранный «applicationProject».

  2. добавлены дополнительные каталоги включения: $(SolutionDir)\applicationProject

Два вопроса:

Во-первых, это законно / достижимо, что я пытаюсь сделать? DLL ссылается на проект приложения, тогда как обычно это должно быть иначе — ссылки приложения на DLL. Гипотетически, если у меня есть два проекта приложений (.exe) & (.exe) можно будет связать одно с другим?

Во-вторых, если ответ на первый вопрос положительный, что я должен добавить / изменить, чтобы он работал?

Спасибо большое!

Николас

0

Решение

Технически, можно сделать DLL для вызова всех необходимых функций из других модулей (даже из .exe — LoadLibrary может сделать это), но это будет большой болью: вам придется явно экспортировать все необходимые методы в. EXE (так же, как вы экспортируете функции DLL) и импортируйте их в свою DLL. Таким образом, ответ на первый вопрос — да, но если DLL хочет использовать много точек входа из EXE-файла, то, вероятно, это не лучший вариант.

Я бы предложил другой подход: иметь общую кодовую базу для проектов .exe (приложение) и .dll. Затем вы сможете протестировать свой код, запустив приложение, и использовать функциональные возможности других приложений через DLL (DLL будет содержать весь необходимый код сам по себе).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]