从应用程序中获取显式加载的DLL的符号。

问题描述 投票:-1回答:1

我正在修改我的应用程序,以便它能够显式地加载一个DLL(通过Windows API)并从DLL中调用一些函数。但我需要能够从DLL中调用一些应用程序的函数。我只能向DLL提供函数的头文件。但是我得到的是LNK2019'unresolved external symbol'错误。

我的想法是否可行?

c++ winapi dll
1个回答
1
投票

所以,你找到了一个方法,然而你也应该问问自己,你是不是 做。

如果你的可执行文件依赖于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);
}

0
投票

感谢@AdrianMole解决了我的问题!为了解决DLL中的外部符号,你需要创建一个EXE的导入库。在Visual Studio 2017中,可以通过进入项目属性来完成。进入链接器→高级,将导入库设置为你想要的路径和名称。(例如:。$(TargetDir)\myimportlibrary.implib). 然后,进入DLL项目属性→Linker→Input,将导入库添加到Additional Dependencies设置中。

© www.soinside.com 2019 - 2024. All rights reserved.