❶ msado15.dll兼容性問題,怎樣實現msado15.dll適用不同版本
你好,
那就下載一個和操作系統匹配的動態鏈文件。
看好了那個dll擴展名的動態鏈名稱,然後使用工具重新下載覆蓋之。方法看教程。
方法一:
1、在同系統中找到此文件,黏貼到:C:\Windows\System32文件夾底下
2、打開CMD窗口輸入如下命令注冊一下所有的動態鏈:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1 回車執行
for %1 in (%windir%\system32\*.ocx) do regsvr32.exe /s %1 回車執行
兩條分別運行完成後重啟機器。
方法二:使用工具,保持聯網,輸入動態鏈名稱,自動更新替換。
❷ 64位系統提示regsvr32.exe不兼容怎麼辦
提示錯誤是因為在64位系統中,運行Regsvr32注冊DLL運行是的System32文件夾中的Regsvr32.exe,而這個文件是64位版本的,命令需要的是32位版本的Regsvr32,所以會提示出錯。
在32位系統中,有system和system32兩個文件夾,分別存放16位和32位的dll文件。按照32位的系統命名規則,64位應該有一個叫做:system64的文件夾來用來存放64位DLL文件,但實際上卻沒有system64這個文件夾,而是一個叫做為SysWOW64的文件夾,而且syswow64也不是存放64位文件的,而是用來存放32位的DLL文件。
所以在64位系統中,32位的dll文件放到syswow64中,64位的dll文件卻在system32文件夾內。
若要解決此問題,就要運行Syswow64文件夾內的Regsvr32.exe。例如按照你圖里的命令,可以採用這種方法來注冊 DLL:
1、打開開始菜單,輸入cmd,在搜索出的CMD上右鍵,選擇以管理員身份運行
2、在打開的命令提示符里輸入:cd windowssyswow64 這個命令是將目錄設置到syswow64這個文件夾,之後運行的命令就會在這個文件夾內找文件夾, 輸入後按回車,如下圖:
3、按照你圖里的命令,輸入:regsvr32 atiacmxx.dll /u 輸入後按回車即可
❸ WIN7 64位系統與xinput1_3.dll版本不兼容,怎麼辦急求解答
下載安裝DirectX9.0c 並安裝。 PChome 有下載 directx-2009-redist.rar 103MB
❹ 如何解決程序/C++Dll的兼容性問題
如何解決程序/C++Dll的兼容性問題
BY Sunyday丶若雪
本文將嘗試解決程序與DLL在不同客戶機上運行存在的兼容性問題
前言
前面的五篇文章已經將程序的核心部分全部搞定,由於我們調用了一些系統API,所以這很有可能導致程序在其他不同的客戶機上無法正確運行。其實關於程序的兼容性提高在之前選擇到底使用何種方法來實現某一功能時已經相當於做過一次了,由於所有的核心功能都是封裝在C++DLL中的,那麼C++DLL兼容性直接決定了程序的兼容性,所以提高c++DLL兼容性成為了至關重要的問題。
1)先嘗試在目標客戶機試運行
注意:在開發者的電腦上測試是絕對通過的,能在開發者電腦上測試通過不代表客戶機能運行,由於開客戶機不一定有開發者電腦的大量程序運行必要的支持框架和組件,所以先要弄清楚程序需要哪些支持框架、組件、Dll,然後再搞清哪些支持框架是客戶機肯定擁有的,哪些是客戶機不一定擁有的
要在客戶機上測試,那麼什麼樣的客戶機是合理的:
Windows操作系統,這是必須的
編寫程序界面的語言是C#,編寫程序核心的語言是C++,兩種語言都需要Microsoft .NET Framework的支持,由於這個程序在編寫當初就沒有想支持XP的意思,所以這兩種語言都選用了Microsoft .NET Framework 4.5版本(XP最高支持到Microsoft .NET Framework 3.0),其實Microsoft .NET Framework 4.5算是客戶機上必有的支持框架了。
大概現在就知道需要這個了,於是打開VM新建一個虛擬機,安裝WIN7,再裝入一個Microsoft .NET Framework 4.5支持框架,把程序拷貝進去,啟動。
由於程序啟動不用調用DLL.dll所以程序界面是可以打開的,繼續測試功能,單擊「連接」。
明明已經把DLL.dll放到了程序運行目錄下,但它還是提示找不到指定模塊DLL.dll
這個提示並不是找不到DLL.dll,其實是想表明DLL.dll所引用的DLL找不到,那麼必須弄清楚這個DLL.dll還引用了什麼其他DLL
2)查看DLL.dll引用了哪些DLL
用DLL函數查看器打開編寫的DLL
查看DLL的引用,將DLL的引用信息輸出TXT文件查看
這里顯示一共引用了5個DLL,功能分別是:
系統支持的:
wlanapi.DLL:管理WLAN的系統DLL
RASAPI32.DLL:管理撥號的系統DLL
KERNEL32.DLL:系統內核DLL
Visual Studio 2015 C++支持的:
VCRUNTIME140.DLL:Visual Studio 2015 生成的 C++ 應用程序所需的運行時組件。
api-ms-win-crt-runtime-l1-1-0.dll:Visual Studio 2015 生成的 C++ 應用程序所需的運行時組件。
註:安裝Visual C++ Redistributable Package就會為Visual Studio 2015 C++ 生成的 C++ 應用提供運行支持
通過上面的DLL分類大概可知是由於DLL.dll找不到Visual Studio 2015支持的兩個DLL導致的
依據我們的DLL引用DLL時的路徑尋找方法(在上一篇文章中提到過),只要把這兩個DLL放到和DLL.dll相同目錄下應該就OK了。
3)依據引用的DLL名稱嘗試找出被引用的DLL
在C盤搜索VCRUNTIME140.DLL,結果如下:
竟然有么多,這就很尷尬了,怎麼確定它調用的是哪個
沒辦法,只能再上一個軟體procexp64_V16.02(進程查看器),他可以看到所有進程調用的所有DLL以及這些被調用的DLL的位置
在開發者電腦上啟動「閃訊破解」
打開procexp64_V16.02,找到「閃訊破解」,按下Ctrl+D顯示閃訊破解所調用的DLL的信息
在這里只找到了VCRUNTIME140.DLL沒有找到api-ms-win-crt-runtime-l1-1-0.dll;先根據procexp64_V16.02的DLL路徑顯示拷貝VCRUNTIME140.DLL到虛擬機應用程序下;由於沒有找到api-ms-win-crt-runtime-l1-1-0.dll的真實調用路徑,只能是去C盤搜索這個DLL然後隨便拷貝一個過來試試了。
現在能確定系統支持的3個DLL和VCRUNTIME140.DLL是沒有問題的,只能嘗試運行程序
果然報錯了,這次不是」找不到指定模塊了「而是「試圖載入不正確的程序」,這是由於引用了不正確的DLL導致的,估計就是api-ms-win-crt-runtime-l1-1-0.dll出問題了。但是畢竟C盤有這么多api-ms-win-crt-runtime-l1-1-0.dll,總不可能都一一拷貝過來嘗試,看來只能另尋他法了。
4)使用靜態編譯生成DLL
右鍵點擊DLL項目名,打開DLL項目屬性
配置屬性–C/C++–代碼生成–運行庫
這里的運行庫有4個選項:
後面的那個』d』是代表DEBUG版本,沒有』d』的就是RELEASE版本了
多線程MT的程序來說,其連接的是libcmt.lib,該文件屬於C語言運行時庫,整個lib都會連接到PE文件當中。
多線程MD的程序鏈接的卻是類似msvcpXXX.dll,該文件屬於微軟運行時庫,也就是說如果是多線程MD編譯出來的文件運行時都會載入相應版本的運行時庫,當如果找不到運行時庫就會報錯而無法運行,同時如果運行時庫不匹配也會出現各種意料之外的崩潰或者程序根本跑不起來等情況。
從上面的說明可以看出由於使用的是MD方式編譯,所以在運行時會調用更多的用於支持VS2015C++應用運行的DLL,為了減少調用DLL數量,選擇MT編譯。
註:千萬不可以調用DEBUG的DLL,否則載入模塊照常會出錯。
選用MT後重新編譯,用DLL查看器打開新生成的DLL,輸出被引用DLL文件信息
發現關於VS2015的兩個DLL都已經消失,只剩下三個系統的DLL
拷貝到虛擬機,嘗試
單擊」連接「按鈕後如果能成功引用DLL中的函數,程序會進行編輯框輸入文本檢驗
程序成功的引用了DLL中的函數,進行了編輯框輸入文本檢驗
同時也發現,新編譯的DLL大小變大了許多
5)使用 多線程MT 方式編譯的弊端
成功運行程序後發現DLL變大了許多,這樣就不是很好了,這是由於多線程MT編譯的時候整個lib都會編譯到DLL文件當中導致的。其實多線程MT編譯不單單是這種缺點:如果是通過多線程MT編譯方式出來的程序,那麼A模塊中申請的內存到B模塊中釋放就會出現問題,這是非常致命的。其實絕大多數軟體都是採用多線程MD方式編譯,如果找到他們目錄很容易發現上面提到的運行時庫。因為這樣一來編譯出來的文件小,所有運行時庫統一,同時也讓內存管理簡單化,省去了跨模塊內存訪問帶來的各種bug。所以多線程MD還是很好用的,能不用多線程MT就不用。
6)如何才能讓多線程MD方式編譯的程序在客戶機正常運行
在上面在解釋引用DLL各自功能中就提到過,安裝Visual C++ Redistributable Package就會為Visual Studio 2015 C++ 生成的 C++ 應用提供運行支持,x64和x86最好都裝上,這樣程序就可以在客戶機上運行了
最後在說兩句
如何提高程序的兼容性
1)對於程序所使用的編程語言的必要運行環境支持必須熟知,比如C#需要安裝Microsoft .NET Framework X.X,C++需要安裝Visual C++ Redistributable for Visual Studio XXXX(x64和x86)
2)要學會使用DLL函數查看器、depends.exe、procexp64_V16.02來查看程序運行所依賴的dll,並不是所有客戶機都有Visual C++ Redistributable for Visual Studio XXXX(x64和x86),把找到的正確的DLL直接加入程序目錄。
3)在程序的安裝程序中添加運行環境檢測,給予沒有必要運行環境的客戶機強制安裝必要的運行環境支持。
❺ 如何讓編譯出的新版dll,可以直接替換舊版本
如果使用的是VS,可以進行如下操作:
打開VS, 文件-新建-新建項目-其他語言-VisualC++-Win32 控制台應用程序。
單擊確定後,彈出對話框,按照對話框「下一步」提示進行操作。
將要編譯的C文件拷貝到CreateDLL項目中,.h文件就放到頭文件夾的目錄下,.c文件放到源文件目錄下,注意後綴名為.c的文件都要改成.cpp,否則編譯會出錯。
注意:申明函數時必須參照上圖紅框標示出來的規則,在Function.cpp文件中必須要引入對應的#include CreateDLL.h。
選中所有需要編譯成dll的cpp文件,右鍵-屬性-預編譯頭-不使用預編譯頭,然後選擇 「生成」即可,這樣在項目的Debug文件夾下面便可找到CreateDLL.dll文件
❻ C#怎麼實現不同的版本載入不同版本的DLL
()
{
Assemblyasm=Assembly.GetExecutingAssembly();
FileVersionInfofvi=FileVersionInfo.GetVersionInfo(asm.Location);
stringversionStr=String.Format("{0}.{1}",fvi.ProctMajorPart,fvi.ProctMinorPart);
}
上述方法可以獲取當前項目的版本,然後你可以在調用DLL的時候寫個if判斷或者switch,調用不同版本的DLL就可以了啊!
❼ SDDynDLL.dll版本過低是怎麼回事 怎麼解決啊
SDDynDll.dll版本太低,請更新!
給你個官方網址http://mxd.sdo.com/web2005/news/news.asp?newsid=6205
可以直接下載替換就好了
❽ Trade.dll版本太低怎麼辦
dll文件在系統和軟體中的重要作用會造成
1,不能正常運行某些應用程序,如游戲
2,系統不能正常運行,出現電腦藍屏現象
3,系統的某些功能不能正常使用,如沒有聲音
4,桌面某些程序無法刪除也是由於DLL文件在後台運行造成
5,用騰訊電腦管家的電腦診所搜你缺失的dll文件,立即修復
❾ msvcr90.dll 安裝後不兼容 哪裡找到兼容版本的
msvcr90.dll這種DLL隸屬於C++組件,它的微軟出品的標准開發環境,集成了很多的API,調用它們就可以實現各種各樣的功能,這樣能減輕開發的工作量,所以幾乎所有的C++編程的程序都會用到它們,如果它們出現錯誤,自然程序就沒法啟動了。
1 你可以重新安裝VC運行庫來解決
因為微軟的開發環境(microsoft Visual C++,簡稱Visual C++、MSVC、VC++或VC)有很多種,像VC2005 VC2010等,你沒法確定是哪個開發庫出現了問題,所以必須要全部重裝所有的開發庫
2 使用騰訊電腦管家的電腦診所來修復,它裡面有專業的修復方案,而且是圖形界面式的,只要動動滑鼠就能修復,很簡單高效,你可以用這種方式來修復
❿ SDDynDll.dll版本太低,怎麼辦
下載最新版本的SDDynDll.dll:
ftp://221.231.131.247/maplestory/mxdfile/SDDynDll.dll
把網址復制到地址欄再按下回車