这个问题使用了一些较旧的技术,所以请耐心等待,我们正在尝试修补旧的解决方案,直到新的解决方案在几个月内部署完毕。因此,这非常重要,我会尽快为此问题添加赏金。
我有一个ms访问adp项目,它使用Windows SBS 2003上的sql server 2005作为后端。在这个项目中,我们使用一些自定义API连接到某些会计软件。这个项目已经工作了很多年。
我以下列方式声明自定义api dll:
Public Declare Function wSDBOpenDatabase Lib "Sage_SA_dblyr.dll" (ByRef pDBLinkNo As Integer, ByVal wFlags As Integer, ByVal pszAppID As String, ByVal pszUserID As String, ByVal pSZPWD As String, ByVal szHost As String, ByVal szCompId As String, ByVal szPort As String) As Integer
据我了解THIS MSDN ARTICLE,该程序将按以下顺序在以下位置查找dll:
所以我将dll文件复制到C:\ Program Files \ Microsoft Office \ Office12目录中,程序找到dll和函数。
在这里创建dll的公司已经更新了他们的文件(每年发生一次),所以我只是将新的dll复制到上面提到的目录中。在过去几年中,所有这一切都是必需的,而且一切正常。
将今年更新中的新dll复制到同一目录后,程序抛出VBA错误#53找不到文件:Sage_SA_dblyr.dll 此问题不会出现在开发计算机上,只会出现在adp项目打包并部署到的计算机上。
但是,如果我尝试显式设置dll的文件位置,而不是在函数的lib声明语句中使用dll名称,那么开发机器将会遇到同样的错误。
我尝试以下列方式显式设置dll的位置以解决部署机器的问题:
Public Declare Function wSDBOpenDatabase Lib "C:\Program Files\Microsoft Office\Office12\Sage_SA_dblyr.dll" (ByRef pDBLinkNo As Integer, ByVal wFlags As Integer, ByVal pszAppID As String, ByVal pszUserID As String, ByVal pSZPWD As String, ByVal szHost As String, ByVal szCompId As String, ByVal szPort As String) As Integer
但是我得到了同样的错误,我也尝试过使用不同的位置。我还将dll复制到我能想象的任何文件夹中,包括windows \ system32和windows \ syswow64的系统根文件夹,具体取决于32位和64位计算机。
注意:这些dll不需要注册
有人可以帮我明确设置dll声明的文件位置,或者找出为什么adp项目无法找到这些dll的新版本。
提前致谢