2011-12-22 43 views
1

我正在使用C++創建一個簡單的DLL,我可以使用VBA代碼。但是,雖然它在我的開發計算機上工作,但試圖訪問不同計算機上的DLL時,VBA聲明DLL文件未找到,儘管硬編碼路徑。儘管硬編碼位置,VBA仍無法找到我的DLL。

我的DLL看起來像這樣(使用Visual C++ 2010爲表達一個Win32 DLL項目):

DEF文件:

LIBRARY "squareNumber" 
EXPORTS 
squareNumber 

Function.cpp:

double __stdcall squareNumber(double & x) 
{ 
    return x*x; 
} 

的VBA代碼如下所示:

Public Declare Function squareNumber Lib "C:\MySimpleDLL.dll" (ByRef number As Double) As Double 

Sub test() 
    MsgBox squareNumber(2) 
End Sub 

我對C++ DLL非常陌生,我編寫的DLL錯誤,還是VBA的問題?

使用RegSvr32還會產生「模塊[dllpath]加載失敗,請確保二進制文件存儲在指定路徑或調試它以檢查二進制或相關.DLL文件的問題。

+2

Project + Properties,C/C++,代碼生成。將運行時庫更改爲/ MT。這可以避免在忘記在目標機器上安裝CRT或使用Debug版本而不是Release版本時的麻煩。 –

回答

5

聽起來像你的DLL依賴於其他開發機器上存在但不在目標機器上的DLL。當操作系統加載您的DLL但無法找到依賴的DLL時,它會報告相同的「無法找到文件」錯誤,從而使您認爲無法找到您的DLL。如果是這種情況,那麼您需要分發這些額外的DLL或刪除它們的依賴關係。

1

爲了獲得有關其他依賴的信息,您的DLL需要您可以嘗試Dependency Walker免費軟件。

0

我剛花了幾天時間追蹤並解決了這個問題。

在我的情況下,問題是我的DLL被動態鏈接到多線程運行時庫DLL。

解決方法是在VS中加載我的項目,編輯項目的屬性,然後在「配置屬性> C/C++>代碼生成」下將「多線程DLL(/ MD)」更改爲「多線程(/ MT)「。

無論如何,問題解決了。希望這可以幫助別人。

相關問題