Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 访问64位DLL函数时出错_C_Visual Studio_Excel_Dll_Vba - Fatal编程技术网

C 访问64位DLL函数时出错

C 访问64位DLL函数时出错,c,visual-studio,excel,dll,vba,C,Visual Studio,Excel,Dll,Vba,我使用Microsoft Visual Studio 2015创建了一个64位DLL文件。 Visual C-->Win32项目 squareMain.c的代码如下: long _stdcall square(long a) { return a*a; } Private Declare PtrSafe Function squareforExl Lib "C:\math.dll" (ByVal x As Long) As Long Sub square() Dim b A

我使用Microsoft Visual Studio 2015创建了一个64位DLL文件。 Visual C-->Win32项目

squareMain.c的代码如下:

 long _stdcall square(long a)
 {
  return a*a;
 }
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
defle.def的代码如下:

    LIBRARY "square"
    EXPORTS
    squareforExl=square
我已经使用configuration manager设置将平台和活动解决方案平台设置为64位DLL的x64来构建DLL

我必须通过Excel vba7访问此DLL函数。 VBA中的功能如下所示:

 long _stdcall square(long a)
 {
  return a*a;
 }
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函数

请检查您的Office安装是64位安装还是32位安装。这意味着,如果VBA编辑器在VBA7中,并不意味着office是64位的。看起来,您已经在64位操作系统上安装了32位office(即2007年的更高版本,以便使用VBA7)。请以32位创建DLL,并在VBA中使用Ptrsafe(因为它是VBA7),错误将被清除。对于64位操作系统上的64位Office安装,使用Ptrsafe调用64位DLL不会有任何问题。我希望使用这两种方法,即(在64位操作系统上使用1.64位office,在64位操作系统上使用VBA7的32位office)和工作。

在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位office环境中的32位dll。C:\\math.dll也适用于32位dll。在这两种情况下,math.dll也被放置在D和E驱动器中。以上两个路径更改都已完成,64位环境中的64位DLL仍然存在相同的问题。系统中的“未找到文件”意味着很多。这不是“开放失败”之类的。我会把dll放在系统路径中,引用它而不使用路径,既便宜又快捷。。。