从vba调用DLL函数excel 64位

时间:2015-06-30 15:12:47

标签: c++ excel vba dll windows-8

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

geoDataRequest

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

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

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

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

End Sub

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

2 个答案:

答案 0 :(得分:0)

我认为这不是造成问题的途径。你没有显式路径时加载错误的DLL,或者你作为64位DLL调用的DLL实际上是32位DLL。

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

答案 1 :(得分:0)

还要确保您的调用约定(stdcall等)在做正确的事情。您没有使用别名这一事实表明,至少应注意您的调用约定。 ByVal看起来不错。

另请参见Calling GetProcAddress from VBA always returns null