我正在修改我的应用程序,以便它能够显式地加载一个DLL(通过Windows API)并从DLL中调用一些函数。但我需要能够从DLL中调用一些应用程序的函数。我只能向DLL提供函数的头文件。但是我得到的是LNK2019'unresolved external symbol'错误。
我的想法是否可行?
所以,你找到了一个方法,然而你也应该问问自己,你是不是 应 做。
如果你的可执行文件依赖于DLL,那么DLL就不应该依赖于该可执行文件。这不仅仅是一个原则问题,也是为了避免未来的问题。
你可以实现DLL对可执行文件的调用的方法是在DLL的头文件中定义一个函数指针类型和一个setter。
typedef void aCallbackType(void);
void setMyCallback(aCallbackType* Cb);
In setMyCallback
DLL存储这个函数指针,以便以后调用它。
然后,可执行文件可以定义一个函数,并将其交给DLL。
void myCallback(void) { }
void myProgram(void) {
setMyCallback(myCallback);
}
感谢@AdrianMole解决了我的问题!为了解决DLL中的外部符号,你需要创建一个EXE的导入库。在Visual Studio 2017中,可以通过进入项目属性来完成。进入链接器→高级,将导入库设置为你想要的路径和名称。(例如:。$(TargetDir)\myimportlibrary.implib
). 然后,进入DLL项目属性→Linker→Input,将导入库添加到Additional Dependencies设置中。