我寫了一個C++ DLL,它使用Sybase的本機C庫連接到Sybase數據庫。我可以在C盤上構建和運行程序,其他人可以從C盤運行程序,並且一切正常。但在某些情況下,我的DLL和Sybase DLL都位於F驅動器而不是C驅動器上。在這些情況下,我的DLL顯然無法加載Sybase DLL。從不同的驅動器號運行時,C++ DLL失敗
我有點不清楚鏈接是如何工作的,但基於我的不完全理解,我最好的猜測是DLL的C驅動器位置是內置到最終DLL中的東西,這是導致它失敗的原因當它從另一個驅動器號運行時。這聽起來像一個合理的解釋?任何其他原因,我的DLL將無法加載從另一個驅動器號運行時的Sybase DLL?任何想法如何解決這個問題?
編輯︰原來這是錯誤的問題,但它導致我在正確的方向。 Sybase DLL使用ini文件來確定數據庫連接詳細信息,並且我已將硬編碼到C驅動器的路徑。
當DLL可能不存在或者可能無法加載時,運行時加載非常有用:例如,如果Sybase DLL可能已安裝或未安裝,程序可能會使用Sybase DLL的運行時加載。 – ChrisW 2009-12-02 20:56:47
@ChrisW:是的,但即使如此,你很少使用絕對路徑。 – EFraim 2009-12-02 21:04:50
感謝您的鏈接。這幫助我排除了我原來的理論。原來,我在數據訪問代碼中有一個C驅動器的位置(一個ini文件)被硬編碼。 – 2009-12-02 21:17:57