我有一个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.h
、Date.cpp
中的应用项目(.exe)中定义。
我已经试过了:
为librarywrap项目添加了新的参考。
Project -> Properties -> Common -> Add New Reference
。选择"applicationProject"。新增
$(SolutionDir)applicationProject
两个问题:
首先,我想做的事情是否合法/可行?DLL链接到应用程序项目,而通常它应该是另一种方式-应用程序链接到DLL。假设如果我有两个应用程序项目(.exe) &(.exe)将有可能链接到另一个?
第二,如果第一个问题的答案是肯定的,我应该增加/改变什么使它起作用?
非常感谢!
尼古拉斯从技术上讲,有可能使DLL从另一个模块调用所有所需的函数(甚至从。exe的- LoadLibrary可以做到这一点),但这将是一个巨大的痛苦:你将不得不导出所有需要的方法显式在。exe(就像你导出DLL函数),并将它们导入到你的DLL。所以第一个问题的答案是肯定的,但是如果DLL想要从EXE中使用很多入口点,那么它可能不是最好的选择。
我建议一个不同的方法:有一个共同的代码库。exe(应用程序)和。dll项目。然后,您将能够通过运行应用程序来测试您的代码,并通过DLL使用来自其他应用程序的功能(DLL将包含所有必要的代码本身)。