2015-06-30 82 views
0

我在使用vba Excel 64位(Win8)中的DLL函數時遇到問題。 當我強制函數聲明從絕對DLL路徑加載,如下所示,沒有問題,我的代碼運行良好。從vba中調用DLL函數excel 64位

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

但是,我不想要絕對路徑。於是,我把旁邊的Excel文件(在同一個文件夾中)dll文件和聲明功能如下所示:

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文件將所有功能導出到外部程序。
我將不勝感激,如果你幫我出

回答

0

我不認爲這是導致問題的路徑。要麼當你沒有顯式路徑時加載錯誤的DLL,要麼因爲64位DLL調用的DLL實際上是32位DLL。

請注意,由於Excel在通過調用帶有錯誤聲明的DLL損壞堆棧之後會進行堆棧修復,因此您不會總是看到您創建的錯誤。確保您在DLL代碼中聲明的指針與您在64位Excel中使用的指針的大小相同。