【发布时间】:2018-01-26 17:29:46
【问题描述】:
我使用 Microsoft Visual Studio 2015 创建了一个 64 位 DLL 文件。 Visual C --> Win32 项目。
squareMain.c的代码如下:
long _stdcall square(long a)
{
return a*a;
}
Defile.def 的代码如下:
LIBRARY "square"
EXPORTS
squareforExl=square
我已经使用配置管理器设置平台和活动解决方案平台为 64 位 DLL 构建了 x64 的 DLL。
我必须通过 Excel vba7 访问这个 DLL 函数。 VBA中的函数如下:
Private Declare PtrSafe Function squareforExl Lib "C:\math.dll" (ByVal x As Long) As Long
Sub square()
Dim b As Long
b = 5
Dim c As Long
Debug.Print b
c = squareforExl(b)
Debug.Print "Square : " & c
End Sub
在上面的代码中尝试访问 DLL 函数 squareforExl() 时,它显示以下错误 msgBox:
Run time Error '53': File not Found :"C:\math.dll"
我尝试将文件放在不同的位置目录中,甚至在系统文件夹中。
我已在 32 位版本的 Office 中成功编译并执行了 32 位 DLL。 我的问题是如何在 64 位版本的 Office 中访问 64 位 dll 的 DLL 函数?
【问题讨论】:
-
您不能在 32 位进程中调用来自 64 位 DLL 的代码,反之亦然。您将需要更改为 64 位版本的 Office,或重新编译 DLL。
-
是的,我正在尝试在 32 位 Office 环境中执行 32 位 dll,并尝试在两台不同机器上的 64 位 Office 环境中执行 64 位 dll。 C源代码和.def源代码已添加到帖子中。
-
既然说文件不存在,那么
C:\math.dll真的存在吗?可能你没有权限阅读这个。你试过C:\\math.dll吗? -
我已将 C:\math.dll 用于 32 位 dll 和 32 位办公环境。 C:\\math.dll 也适用于 32 位 DLL。此外,对于这两种情况,math.dll 也已放置在 D 和 E 驱动器中。上述两个路径更改都已完成,64 位 DLL 在 64 位环境下仍然存在相同的问题。
-
“找不到文件”来自系统意味着很多。这不是“打开失败”之类的。我会把dll放在系统路径中,不带路径引用它,便宜又快...
标签: c visual-studio excel dll vba