繁体   English   中英

C ++一种解决方案两个项目(exe和dll)链接错误

[英]c++ one solution two projects (exe & dll) linking error

我有一个由两个win32项目组成的Visual Studio解决方案: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

两个问题:

首先,我要这样做是否合法/可以实现? DLL链接到应用程序项目,而通常它应该是相反的方式-应用程序链接到DLL。 假设如果我有两个应用程序项目(.exe)和(.exe),是否可以将一个链接到另一个?

第二,如果第一个问题的答案是肯定的,我应该添加/更改使其生效吗?

非常感谢!

尼古拉斯

从技术上讲,可以使DLL从另一个模块(甚至从.exe调用-LoadLibrary可以执行此操作)中调用所有需要的函数,但这将是一个很大的麻烦:您将必须在。明确地导出所有需要的方法。 EXE(就像您导出DLL函数一样)并将其导入到DLL中。 因此,第一个问题的答案是肯定的,但是如果DLL要使用EXE中的许多入口点,则可能不是最佳选择。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM