Visual Studio 2019:引用动态DLL项目

前文:Visual Studio 2019:创建动态DLL库

创建客户端应用

1、在菜单栏上,选择“文件”>“新建”>“项目”,打开“创建新项目”对话框 。
在这里插入图片描述

2、在对话框顶部,将“语言” 设置为“C++” ,将“平台” 设置为“Windows” ,并将“项目类型” 设置为“控制台” ,选择“控制台应用”,然后选择“下一步” 。
在这里插入图片描述

3、在“配置新项目”页面,在“项目名称”框中输入“MathClient”
在这里插入图片描述
接下来,要在源代码中调用 MathLibrary 函数,你的项目必须包括 MathLibrary.h 文件 。

  • 可以将此头文件复制到客户端应用项目中,然后将其作为现有项添加到项目中。对于第三方库,此方法可能是一个不错的选择。
  • 但是,如果同时处理 DLL 的代码和客户端的代码,则头文件可能会变为不同步。要避免此问题,请设置项目中的“附加包含目录” 路径,使其包含指向原始头文件的路径。

将 DLL 头文件添加到包含路径

1、右键单击“解决方案资源管理器” 中的“MathClient” 节点以打开“属性页” 对话框。
在这里插入图片描述
2、在“配置”下拉框中,选择“所有配置”,在左窗格中,选择“配置属性” > “C/C++” > “常规” 。在属性窗格中,选择“附加包含目录” 编辑框旁的下拉控件,然后选择“编辑” 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3、修改MathClient.cpp

// MathClient.cpp : Client app for MathLibrary DLL.
// #include "pch.h" Uncomment for Visual Studio 2017 and earlier
#include <iostream>
#include "MathLibrary.h"

int main()
{
    // Initialize a Fibonacci relation sequence.
    fibonacci_init(1, 1);
    // Write out the sequence values until overflow.
    do {
        std::cout << fibonacci_index() << ": "
            << fibonacci_current() << std::endl;
    } while (fibonacci_next());
    // Report count of values written before overflow.
    std::cout << fibonacci_index() + 1 <<
        " Fibonacci sequence values fit in an " <<
        "unsigned 64-bit integer." << std::endl;
}

4、生成解决方案
在这里插入图片描述

此代码可进行编译,但不能链接。 如果现在生成客户端应用,则错误列表会显示几个 LNK2019 错误。 这是因为项目丢失了一些信息:你尚未指定项目在 MathLibrary.lib 库上有依赖项 。 而且,你尚未告诉链接器如何查找 MathLibrary.lib 文件 。
在这里插入图片描述
要解决此问题,可以直接将库文件复制到客户端应用项目中。 链接器将自动查找并使用它。 但是,如果库和客户端应用都处于开发过程中,则可能会导致一个副本中的更改未在另一个副本中显示。 要避免此问题,可以设置“附加依赖项”属性,告诉生成系统项目依赖于 MathLibrary.lib 。 此外,还可设置项目中的“附加库目录” 路径,使其在链接时包含指向原始库的路径。

将 DLL 导入库添加到项目中

1、右键单击“解决方案资源管理器”中的“MathClient”节点,然后选择“属性”以打开“属性页”对话框 。
在这里插入图片描述

2、在“配置”下拉框中,选择“所有配置”(如果尚未选择) 。 它可确保任何属性更改同时应用于调试和发布版本。
在这里插入图片描述

3、在左窗格中,选择“配置属性” > “链接器” > “输入” 。 在属性窗格中,选择“附加依赖项” 编辑框旁的下拉控件,然后选择“编辑” 。
在这里插入图片描述
4、在“附加依赖项”对话框中,将 【MathLibrary.lib 】这个名字复制黏贴到顶部编辑控件的列表中 。选择“确定” 返回到“属性页” 对话框。注意是.lib而不是.dll, 否则编译时:LNK1107 文件无效或损坏: 无法在 0x350 处读取

在这里插入图片描述

5、在左窗格中,选择“配置属性” > “链接器” > “常规” 。 在属性窗格中,选择“附加库目录” 编辑框旁的下拉控件,然后选择“编辑” 。
在这里插入图片描述
在这里插入图片描述
6、生成解决方案
在这里插入图片描述
在这里插入图片描述
客户端应用现在可以成功编译和链接

7、运行
在这里插入图片描述
仍未具备运行所需的全部条件。 当操作系统加载应用时,它会查找 MathLibrary DLL。 如果在某些系统目录、环境路径或本地应用目录中找不到 DLL,则加载会失败:
在这里插入图片描述
避免此问题的一种方法是将 DLL 复制到包含客户端可执行文件的目录中,作为生成过程的一部分。 可将“后期生成事件”添加到项目中,以此添加一条命令,将 DLL 复制到生成输出目录 。 此处指定的命令仅在 DLL 丢失或发生更改时才复制它。 此命令使用宏根据生成配置在调试或发布位置之间进行复制。

在生成后事件中复制 DLL

1、右键单击“解决方案资源管理器”中的“MathClient”节点,然后选择“属性”以打开“属性页”对话框 。
在这里插入图片描述

2、在“配置”下拉框中,选择“所有配置”(如果尚未选择) 。 它可确保任何属性更改同时应用于调试和发布版本。
在这里插入图片描述
3、在左窗格中,选择“配置属性” > “生成事件” > “生成后事件” 。

4、在属性窗格中,在“命令行”字段中选择编辑控件 。 如果已按照指示将客户端项目置于 DLL 项目的单独解决方案中,则输入以下命令:
xcopy /y /d "..\..\MathLibrary\$(IntDir)MathLibrary.dll" "$(OutDir)"

如果 DLL 和客户端项目在其他目录中,请更改 DLL 的相对路径以进行匹配。
在这里插入图片描述
5、在菜单栏上,选择“调试” > “启动而不调试”
在这里插入图片描述

Windows 7操作系统中,错误模块路径C:\windows\Syswow64\nt.dll是指ntdll.dll文件在系统中的位置。ntdll.dllWindows 7操作系统中的一个重要组件,是NT内核级文件,系统从ring3到ring0的入口。当系统出现ntdll.dll模块故障的错误提示时,可以通过以下方法进行修复: 1. 首先,下载ntdll.dll文件。确保下载的dll文件与您的操作系统相匹配,如果您的系统是64位的,请下载64位的dll文件。 2. 然后,将下载的dll文件复制到C:\Windows\SysWOW64目录下。这是64位系统的系统目录,如果您的系统是32位的,请将dll文件复制到C:\Windows\System32目录下。 3. 最后,重新启动计算机,以使更改生效。 通过以上方法,您可以修复win7错误模块路径C:\windows\Syswow64\ntdll.dll的问题。请注意,在进行任何系统文件更改之前,请确保备份重要数据,并谨慎操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [windows mysql服务自动启动 错误模块名称:ntdll.dll](https://blog.csdn.net/hefeng_aspnet/article/details/131662120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【已解决】win7系统出现ntdll.dll错误模块怎么解决?](https://blog.csdn.net/qdx698767896/article/details/122352460)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值