2

我在使用 VBA 代码引用 DLL 时遇到问题。

我的目标是: 我有一个 dll 文件,用 C++ 编写的代码(我猜是这样)并编译。我不知道那里编码了什么。我必须从我的 VBA 代码中访问这个 dll,从 dll 中获取结果。我对 dll 的输入是 Excel 表中的 3 个整数值。

我已经像这样声明了 dll Public Declare Function quadratic Lib "C:...\Desktop\Test\quadratic.dll" (ByVal a As Integer, ByVal b As Integer, ByVal c As Integer) As Double (... 三点只是窗口目录)

单击按钮时,我从工作表中读取输入值 a,b,c 并调用传递参数的函数,例如 getvalue = quadratic(a, b, c)

  1. 运行脚本时出现 Microsoft Visual Basic 错误,提示“运行时错误 '48':找不到文件:C:...\Desktop\Test\quadratic.dll”

  2. 在此之后,我尝试使用 Tools->Reference->Browse 引用此 dll,然后映射保存在我桌面上的 dll 文件,我收到 Microsoft Visual Basic for Application 错误,提示可以添加对指定文件的引用。

  3. 我尝试使用带有命令 regsvr32 C:...\dllname.dll 的 cmd 提示符注册 DLL,它给出以下错误“LoadLibrary("C:\Documents") failed - The specific module could not be found”

  4. 我尝试使用命令 rundll32.exe C:...\dllname.dll 在 cmd 提示符下使用第二种方法注册 DLL,它给出以下错误“加载 C:\Documents 时出错。找不到特定模块”

我不知道如何解决这个问题。我通过更改VB代码尝试了各种方法,但没有任何乐趣。

我需要, 1. 如何使用 VBA 脚本引用它?2. 如何找到DLL中的问题为什么我不能在VBA中引用它?

请尽快帮助我,因为它非常紧急。

问候, 卡比兰

4

1 回答 1

0

如果不了解有关 Dll 和您正在使用的文件结构的更多信息,很难诊断问题,但看起来 Dll 当前位于“我的文档”或类似目录下的目录中。请记住,DOS 不会自动处理空格 - 您需要添加双引号。

尝试再次运行 register 命令,但这次用引号将路径括起来,例如

regsvr32 "C:\Documents and Settings\dllname.dll"

假设这可行,应该能够以您在步骤 2 中指定的方式引用 Dll。

于 2012-11-23T16:03:15.830 回答