C++ 一个解决方案两个项目(EXE & 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 "..applicationProjectDate.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

两个问题:

首先,我想做的事情是否合法/可行?DLL链接到应用程序项目,而通常它应该是另一种方式-应用程序链接到DLL。假设如果我有两个应用程序项目(.exe) &(.exe)将有可能链接到另一个?

第二,如果第一个问题的答案是肯定的,我应该增加/改变什么使它起作用?

非常感谢!

尼古拉斯

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

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

最新更新