首页 文章

从vba excel 64位调用DLL函数

提问于
浏览
0

我在使用vba Excel 64位(Win8)中的DLL函数时遇到问题 . 当我强制从绝对DLL路径加载函数声明时,如下所示,没有问题,我的代码运行良好 .

Private Declare PtrSafe Function get_Ith Lib "MYPATH\CVode.dll" (ByVal lpv As LongPtr, ByVal i As LongPtr) As Double

但是,我不想要绝对的道路 . 所以,我把dll文件放在excel文件旁边(在同一个文件夹中)并声明如下函数:

Private Declare PtrSafe Function get_Ith Lib "CVode.dll" (ByVal lpv As LongPtr, ByVal i As LongPtr) As Double

然后我在excel表的Workbook_Open中包含以下语句 .

Private Sub Workbook_Open()
  ChDrive ThisWorkbook.Path
  ChDir ThisWorkbook.Path

结束子

我一直在使用这个方法为这个DLL(但更新的版本)以及其他项目没有任何问题 . 但是现在vba从dll函数返回一些不相关的值,我的程序会爆炸 . 顺便说一下,这个dll是用c编写的,我有源代码 . 在源代码中有.def文件将所有函数导出到外部程序 .
如果你帮助我,我将不胜感激

1 回答

  • 0

    我不认为这是导致问题的路径 . 当您没有显式路径时,您正在加载错误的DLL,或者您作为64位DLL调用的DLL实际上是32位DLL .

    请注意,因为Excel在通过使用错误的声明调用DLL来破坏堆栈之后执行stack-fixup,所以您不会总是看到您创建的错误 . 确保在DLL代码中声明的指针大小与在64位Excel中使用的指针大小相同 .

相关问题