c ++ one解决方案两个项目(exe& dll)链接错误

时间:2013-03-31 14:11:29

标签: c++ dll linker-errors projects-and-solutions

我有一个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)Date.hDate.cpp内的应用程序项目(.exe)中定义。

我已经尝试过做了什么:

  1. 为librarywrap项目添加了新的参考。 Project -> Properties -> Common -> Add New Reference。选择“applicationProject”。

  2. 添加了其他包含目录:$(SolutionDir)\applicationProject

  3. 两个问题:

    首先,这是合法/可实现的,我正在尝试做什么? DLL链接到应用程序项目,而通常它应该是其他方式 - 应用程序链接到DLL。假设我有两个应用项目(.exe)&amp; (.exe)可以将一个链接到另一个吗?

    第二,如果第一个问题的答案是肯定的,我应该添加/更改哪些内容才能使其正常工作?

    非常感谢!

    尼古拉斯

1 个答案:

答案 0 :(得分:1)

从技术上讲,有可能使DLL从另一个模块调用所有需要的函数(甚至可以从.exe文件中调用它们 - LoadLibrary可以这样做),但这将是一个巨大的痛苦:你必须明确地导出所有需要的方法在.EXE中(就像导出DLL函数一样)并将它们导入到DLL中。所以第一个问题的答案是肯定的,但如果DLL想要使用EXE中的大量入口点,那么可能它不是最好的选择。

我建议采用不同的方法:为.exe(应用程序)和.dll项目提供通用代码库。然后,您将能够通过运行应用程序来测试代码,并通过DLL使用其他应用程序的功能(DLL将包含所有必需的代码本身)。