如何使用 LoadLibrary 函数导入 dll 文件并使用 dll 文件中的函数?

Posted

技术标签:

【中文标题】如何使用 LoadLibrary 函数导入 dll 文件并使用 dll 文件中的函数?【英文标题】:How do I use the LoadLibrary function to import a dll file and use functions from dll file? 【发布时间】:2017-03-14 20:23:45 【问题描述】:

问题

我想创建一个 c++ 文件,它只调用 .dll 文件中我需要的一个函数并返回值。但是,我一直在尝试使用 LoadLibrary() 根本没有成功。当我将鼠标悬停在 LoadLibrary 上时,它显示“标识符“LoadLibrary”未定义”。我认为导入 windows.h 和 winbase.h 应该足以定义库...

#pragma once
#include <windows.h>
#include <iostream>
#include <WinBase.h>
#include <E:\Users\Zachary\Anaconda3\include\Python.h>

int main()

    HINSTANCE dll = LoadLibrary("cbw64.dll");

关于我的项目设计的更多细节

我目前正在从事一个高级设计项目,我必须连接到 Omega 的 OM-USB-TC 数据采集单元。最终,我需要做的就是从这个单元获取温度数据,然后将它交给 python 来做一些很酷的绘图工作。但是,我没有这个 daq 的任何通信协议,因为该公司不愿意提供它。所以,我必须使用他们提供的通用库。

要使用该库,我需要导入一个 .dll 文件。但是,python 使用它很棘手,因为温度数据存储在一个 in-out 变量中以便用 c 编程,而且似乎 python 不能很好地处理 in-out 变量。

【问题讨论】:

代码是否编译,或者您只是假设它不会因为您将鼠标悬停在它上面时看到的内容?另外,您的问题并不是很清楚,您可能应该将其改写为仅与问题有关-我们不需要知道所有其他信息,如果您要问的只是为什么 LoadLibrary 函数这么说当你将鼠标悬停在它上面时它是未定义的。 查看这篇文章:***.com/questions/8696653/… 感谢您的回复。它不会编译,也不会加载 .dll 文件。问题真的是:如何使 LoadLibrary 函数工作以导入 dll 文件,然后使用所述 dll 文件中的函数。 嗨 Zach,我编辑了您的帖子,通过重新排序段落来更加强调您问题的核心,但如果您觉得我的更改掩盖了一些重要细节,请再次编辑。请记住,如果读者能够快速浏览您的问题,您将获得更多答案。 匿名,这是我最初想到使用 LoadLibrary() 函数的帖子。问题是当我以这种方式定义库时,我无法加载它。 【参考方案1】:
HMODULE WINAPI 
LoadLibrary(
    _In_ LPCTSTR 
lpFileName
);

也可以插入#include &lt;string&gt;

【讨论】:

感谢您的回复。但是,我看不到这如何将加载的库分配给我可以调用的位置。它只是加载到库中并允许我使用这些功能吗? 是的。另外,请确保您的文件目录和文件名正确。任何小错误(例如缺少字符)都可能导致此错误。 我假设我需要给 lpFileName 一个值才能使它工作。所以,我给了它一个带有完整文件路径的字符串(这似乎是我从link 理解的。但是,在调用函数后(正确地从 Omega 的帮助文件中)我收到一个错误,上面写着“错误 C3861: 'cbTIn': 未找到标识符" 看看这个:link

以上是关于如何使用 LoadLibrary 函数导入 dll 文件并使用 dll 文件中的函数?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 上使用带有 LoadLibrary() 方法的库 dll

如何解决java调dll报Unable to load library的错误

C/C++:项目中的dll的构建和dll的导入函数并执行(VS2015)

C/C++:项目中的dll的构建和dll的导入函数并执行(VS2015)

C/C++:项目中的dll的构建和dll的导入函数并执行(VS2015)

loadlibrary函数中DLL的路径怎样表示