访问64位DLL函数时出错

时间:2017-08-18 06:14:35

标签: c visual-studio excel-vba dll vba

我使用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

我使用配置管理器设置set platform和active solution platform为x64 for 64bit DLL构建了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函数?

1 个答案:

答案 0 :(得分:0)

请检查您的Office安装是64位安装还是32位安装。这意味着,如果VBA编辑器位于VBA7中,则并不意味着Office是64位的。看来,您在64位OS上安装了32位Office(即2007年以后的版本,所以是VBA7)。请创建32位DLL,并在VBA中使用Ptrsafe(因为它是VBA7),该错误将被消除。对于在64位OS上进行64位Office安装,使用Ptrsafe调用64位DLL不会有任何问题。我会两种用法(即1.在64位操作系统上使用64位办公室。2.在64位OS上使用VBA7的32位办公室)并正常工作。