① 電腦qq打不開,卸載重裝,什麼添加dll都不行,求大神幫忙,qq.exe無法找到入口 無法定位程序輸入點
一、如果在運行某軟體或編譯程序時提示缺少、找不到等類似提示,您可下載拷貝到指定目錄即可(一般是system系統目錄或放到軟體同級目錄裡面),或者重新添加文件引用。
二、下載下來文件之後,先將其解壓(一般都是rar壓縮包), 然後根據您系統的情況選擇X86/X64,X86為32位電腦,X64為64位電腦。默認都是支持32位系統
三、使用騰訊電腦管家,點開電腦診所之後,搜缺失的dll文件,會自動篩選出來,然後你只需要點立即修復即可!
② MFC 程序編譯連接通過後無法啟動
DLL文件(Dynamic Linkable Library 即動態鏈接庫文件),是一種不能單獨運行的文件,它允許程序共享執行特殊任務所必需的代碼和其他資源
比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個軟體系統的工作。可能存在一些模塊的功能較為通用,在構造其它軟體系統時仍會被使用。在構造軟體系統時,如果將所有模塊的源代碼都靜態編譯到整個應用程序 EXE 文件中,會產生一些問題:一個缺點是增加了應用程序的大小,它會佔用更多的磁碟空間,程序運行時也會消耗較大的內存空間,造成系統資源的浪費;另一個缺點是,在編寫大的 EXE 程序時,在每次修改重建時都必須調整編譯所有源代碼,增加了編譯過程的復雜性,也不利於階段性的單元測試。
Windows 系統平台上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建為較小的 DLL 文件,並可對它們單獨編譯和測試。在運行時,只有當 EXE 程序確實要調用這些 DLL 模塊的情況下,系統才會將它們裝載到內存空間中。這種方式不僅減少了 EXE 文件的大小和對內存空間的需求,而且使這些 DLL 模塊可以同時被多個應用程序使用。Windows 自己就將一些主要的系統功能以 DLL 模塊的形式實現。
一般來說,DLL 是一種磁碟文件,以.dll、.DRV、.FON、.SYS 和許多以 .EXE 為擴展名的系統文件都可以是 DLL。它由全局數據、服務函數和資源組成,在運行時被系統載入到調用進程的虛擬空間中,成為調用進程的一部分。如果與其它 DLL 之間沒有沖突,該文件通常映射到進程虛擬空間的同一地址上。DLL 模塊中包含各種導出函數,用於向外界提供服務。DLL 可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個 DLL 在內存中只有一個實例;DLL 實現了代碼封裝性;DLL 的編制與具體的編程語言及編譯器無關。
在 Win32 環境中,每個進程都復制了自己的讀/寫全局變數。如果想要與其它進程共享內存,必須使用內存映射文件或者聲明一個共享數據段。DLL 模塊需要的堆棧內存都是從運行進程的堆棧中分配出來的。Windows 在載入 DLL 模塊時將進程函數調用與 DLL 文件的導出函數相匹配。Windows 操作系統對 DLL 的操作僅僅是把 DLL 映射到需要它的進程的虛擬地址空間里去。DLL 函數中的代碼所創建的任何對象(包括變數)都歸調用它的線程或進程所有。
調用方式:
1、靜態調用方式:由編譯系統完成對 DLL 的載入和應用程序結束時 DLL 卸載的編碼(如還有其它程序使用該 DLL,則 Windows 對 DLL 的應用記錄減1,直到所有相關程序都結束對該 DLL 的使用時才釋放它,簡單實用,但不夠靈活,只能滿足一般要求。
隱式的調用:需要把產生動態連接庫時產生的 .LIB 文件加入到應用程序的工程中,想使用 DLL 中的函數時,只須說明一下。隱式調用不需要調用 LoadLibrary() 和 FreeLibrary()。程序員在建立一個 DLL 文件時,鏈接程序會自動生成一個與之對應的 LIB 導入文件。該文件包含了每一個 DLL 導出函數的符號名和可選的標識號,但是並不含有實際的代碼。LIB 文件作為 DLL 的替代文件被編譯到應用程序項目中。
當程序員通過靜態鏈接方式編譯生成應用程序時,應用程序中的調用函數與 LIB 文件中導出符號相匹配,這些符號或標識號進入到生成的 EXE 文件中。LIB 文件中也包含了對應的 DL L文件名(但不是完全的路徑名),鏈接程序將其存儲在 EXE 文件內部。
當應用程序運行過程中需要載入 DLL 文件時,Windows 根據這些信息發現並載入 DLL,然後通過符號名或標識號實現對 DLL 函數的動態鏈接。所有被應用程序調用的 DLL 文件都會在應用程序 EXE 文件載入時被載入在到內存中。可執行程序鏈接到一個包含 DLL 輸出函數信息的輸入庫文件(.LIB文件)。操作系統在載入使用可執行程序時載入 DLL。可執行程序直接通過函數名調用 DLL 的輸出函數,調用方法和程序內部其 它的函數是一樣的。
2、動態調用方式:是由編程者用 API 函數載入和卸載 DLL 來達到調用 DLL 的目的,使用上較復雜,但能更加有效地使用內存,是編制大型應用程序時的重要方式。
顯式的調用:
是指在應用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 顯式的將自己所做的動態連接庫調進來,動態連接庫的文件名即是上面兩個函數的參數,再用 GetProcAddress() 獲取想要引入的函數。自此,你就可以象使用如同本應用程序自定義的函數一樣來調用此引入函數了。在應用程序退出之前,應該用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 釋放動態連接庫。直接調用 Win32 的 LoadLibary 函數,並指定 DLL 的路徑作為參數。LoadLibary 返回 HINSTANCE 參數,應用程序在調用 GetProcAddress 函數時使用這一參數。GetProcAddress 函數將符號名或標識號轉換為 DLL 內部的地址。程序員可以決定 DLL 文件何時載入或不載入,顯式鏈接在運行時決定載入哪個 DLL 文件。使用 DLL 的程序在使用之前必須載入(LoadLibrary)載入DLL從而得到一個DLL模塊的句柄,然後調用 GetProcAddress 函數得到輸出函數的指針,在退出之前必須卸載DLL(FreeLibrary)。
正因為DLL 有佔用內存小,好編輯等的特點有很多電腦病毒都是DLL格式文件。但不能單獨運行。
動態鏈接庫通常都不能直接運行,也不能接收消息。它們是一些獨立的文件,其中包含能被可執行程序或其它DLL調用來完成某項工作的函數。只有在其它模塊調用動態鏈接庫中的函數時,它才發揮作用。
dll和內存管理
在Win32中,DLL文件按照片段(sections)進行組織。每個片段有它自己的屬性,如可寫或是只讀、可執行(代碼)或者不可執行(數據)等等。
DLL代碼段通常被使用這個DLL的進程所共享;也就是說它們在物理內存中占據一個地方,並且不會出現在頁面文件中。如果代碼段所佔據的物理內存被收回,它的內容就會被放棄,後面如果需要的話就直接從DLL文件重新載入。
與代碼段不同,DLL的數據段通常是私有的;也就是說,每個使用DLL的進程都有自己的DLL數據副本。作為選擇,數據段可以設置為共享,允許通過這個共享內存區域進行進程間通信。但是,因為用戶許可權不能應用到這個共享DLL內存,這將產生一個安全漏洞;也就是一個進程能夠破壞共享數據,這將導致其它的共享進程異常。例如,一個使用訪客賬號的進程將可能通過這種方式破壞其它運行在特權賬號的進程。這是在DLL中避免使用共享片段的一個重要原因。
當DLL被如UPX這樣一個可執行的packer壓縮時,它的所有代碼段都標記為可以讀寫並且是非共享的。可以讀寫的代碼段,類似於私有數據段,是每個進程私有的並且被頁面文件備份。這樣,壓縮DLL將同時增加內存和磁碟空間消耗,所以共享DLL應當避免使用壓縮DLL。[1][2]
[3]找到DLL文件地址:C:\WINDOWS\system32\****.dll時出錯(****就是你的那個找不到的文件名)
開始--運行--msconfig--啟動--找到和你說的類似的選項****--取消勾--確定,然後
1,開始-運行-輸入:regedit,然後回車
2,選擇「我的電腦」,然後點擊「文件」-「導出」-隨便起個名字點「保存」。這樣做的目的是備份一下注冊表,以免誤操作後及時恢復。恢復的方法是,找到你剛才保存的文件,雙擊它,然後選擇「允許導入」即可。
3,選擇「我的電腦」,按F3鍵,然後輸入「****」,點擊「查找下一個」,找到後一定要核對是不是****.dll文件,因為你給的文件名不全,如果確認,對該項點「右鍵」選「刪除」。「此時可以輸入****.dll進行查找,結果出來後要看後面的數值部分,不能光看文件名稱,只要有****.dll在的文件不管它邊上還寫沒寫別的(如:****.dll,load),都要刪除!」
4,然後再按F3鍵-刪除,直到提示「沒有找到相應選項」為止。
5,重新啟動計算機,看看系統有沒有問題。
注,如果出現了其它嚴重問題,請恢復注冊表。
③ 用vs編譯C++文件時無法啟動程序,並且找不到指定文件怎麼辦
1、用 VS 打開工程,點擊菜單 項目 - 屬性。
④ WIN7 64位 下VS2015編譯通過,但是無法啟動程序 提示 WinTab32.dll 已經載入但是找不到入口點怎麼辦
方法/步驟
1、通常在運行中注冊動態庫文件:regsvr32 msi.dll (按回車鍵執行命令)都能順利通過。
2、但也有出錯提示:
模塊「xxx.dll」已載入,但找不到入口點DLLRegisterServer
請確保xxx.dll為有效的DLL或OCX文件,然後重試。
3、這就要看當前是單個動態鏈文件不能注冊,還是所有的文件都是注冊無效。如果是單個文件注冊無效,那就是這個動態鏈文件有問題,找到相同的操作系統(32位或者64位)相應的路徑中,復制一個(網上下載也行),保存到自己的操作系統中即可。64位操作系統的路徑是:C:\Windows\System32 文件夾內。
4、如果是64位的操作系統,那麼提取、保存正確的32位動態鏈文件的路徑是:
C:\Windows\SysWOW64 文件夾內。
5、如果所有的動態鏈文件注冊都無效,那就是當前的操作系統無許可權。可以載入許可權注冊即可。步驟如下:
開始→所有程序→附件→右鍵點擊命令提示符(CMD)→以管理員身份運行。
6、然後,再使用命令注冊: regsvr32 msi.dll
提示:可以先復制命令,再點擊左上角,在彈出來的菜單中點選編輯→粘貼命令。
7、注冊成功之後會有提示。
8、也可以將絕對路徑添加上去(先去該路徑查找是否有這個動態鏈文件):
regsvr32 C:\Windows\SysWOW64\msi.dll
9、最後,注意命令參數的應用,有時候需要先解除注冊,之後再注冊才可以。
1右鍵添加以管理員身份運行。
⑤ c語言入門求助。編譯的時候無法啟動程序,找不到指定文件,怎麼解決呢,這是截圖。
操作方法不對造成的原因。解決方法如下:
1、應該先建項目>空白項目。
⑥ rundll32.exe 無法找到入口 無法定位程序輸入點 DeleteWadCacheForNetworks於動態鏈接庫 WinINet.dll上
最近,多種軟體都出現了一個啟動時的錯誤提示 「無法定位程序輸入點_except_handler4_common於動態鏈接庫msvcrt.dll上」。 出現這個提示情況是:Windows Xp 系統; 軟體包括:window live writer 2009, windows messenger 2009, firefox 3.5 等非常新的版本。 這個提示出現後,點擊確定,並不影響程序的使用。這個問題出現的原因,其實微軟自己的問題。可謂是微軟的Vista 後遺症吧。 在Vista 系統里,有個挺酷的功能,就是「程序縮略圖」,有點3D效果,這個功能,調用了 dwmapi.dll 這個庫,而 dwmapi.dll 又引用了 msvcrt.dll 中的 _except_handler4_common 功能。 然而,在XP系統中,系統自帶的 msvcrt.dll 和 Vista 中的 msvcrt.dll 版本不同, 並沒有這個 _except_handler4_common ,結果就出現了啟動程序時,遇到的 「無法定位程序輸入點_except_handler4_common於動態鏈接庫msvcrt.dll上」的錯誤提示。 解決方法: 將c:\windows\system32 下的 dwmapi.dll 改名,例如:改為 dwmapi.dll.bak。 更改後,可以直接打開ps,省去運行時間! 更改後dwmapi.dll資料庫文件屬性會改變,圖標會變成未知應用程序文件,不必驚慌,根本就不用管它。 收集自網路: 無法定位程序輸入點_except_handler4_common於動態鏈接庫msvcrt.dll上解決方式如下: 這是由於sp3載入的驅動造成的;只需要將C:\WINDOWS\system32\dwmapi.dll重新命名一下即可以解決。 原因: 淺談Windows環境軟體故障調試與分析 大家好,我是Eric,今天,我將與大家一起分享一個軟體故障的調試與分析案例,希望給大家提供一個解決Windows下軟體錯誤的基本分析思路和供參考的一類解決方法。看完本例,您將會初步了解到Dll Entry Point錯誤的一些基本知識,也將接觸到像Winbdg、Dependency Walker一類的專業調試、分析工具軟體的基本使用,在這里我也和大家一起分享並探討。 本例中出現錯誤的軟體是中國移動飛信2008版客戶端,具飢掘體現象是每次雙擊圖標啟動該程序時總會收到一個錯誤信息對話框——標題為「FetionFX.exe - Entry Point Not Found」,內容為「The procere entry point _except_handler4_common could not be located in the dynamic link library msvcrt.dll.」。如下圖所示: 、 以前在台式機中文版Microsoft Windows XP Professional with Service Pace 2上使用這個客戶端時並沒有出現該問題,但是今年9月份我將筆記本計算機的操作系統安裝為Microsoft Windows XP Professional with Service Pace 3的英文版,然後於10月初安裝飛信客戶端之後就一直存有這個問題,直到今天我才有一塊集中的空餘時間來分析解決。之前我搜索過網路,但是答案均是「系統缺少msvcrt.dll,下載一個就好了」或者是「msvcrt.dll版本不正確,下載一個替換即可」,為了圖簡便,我也試過,但是根本不奏效。可是我發現沒有解決也可以正常使用飛信,只是每次要彈出這個錯誤消息,所以也沒急著管。哈哈~幸好今天解決掉了,心得是解決軟體故障不能浮於表面,欲發掘內在問題和根本原因,還得自己架設環境手動分析,因為軟體太多了,錯誤的種類也舉晌太多了,一切還是得具體情況具體分析阿~~下面我們一起來看看整個過程吧:(全部的分析調試過程不止爛答核下面的這些,但是經過解決這個問題,以下整理出來的思路應該是最簡短並且能夠找到問題原因的) 首先,我們讓該問題重現,即雙擊飛信客戶端的桌面圖標,讓其彈出該錯誤對話框。錯誤提示出現了,我們先不急著點擊「OK(確定)」按鈕,而是啟動一個調試程序。(本例中使用著名的Microsoft Windbg工具進行調試分析)然後在「File(文件)」菜單中選擇「Attach to a Process...(附加到一個進程)」,選擇當前的飛信客戶端的進程「FetionFX.exe」。這里之所以要選擇Attach to a Process就是因為我們要將調試器跟蹤到當前這個產生錯誤的進程,然後從內存中實時察看相關的線程堆棧甚至API函數的調用。Windbg中還支持其他的幾種類型的調試,須根據具體情形按需選擇。附加到該進程之後的結果如下圖所示: 然後,我們可以在圖中清晰地看到,當系統載入到「c:\Program Files\China Mobile\Fetion\dwmapi.dll」時掛起,就是圖中的"Warning: Break-in time out, suspending.",在Windows中的表現也就是彈出了上述的錯誤對話框,並且我們還沒有點擊「確定」按鈕,於是程序暫時掛起。因此,我們可以判斷,FeionFX.exe啟動時載入的位於「c:\Program Files\China Mobile\Fetion\」目錄下的dwmapi.dll在執行某個函數過程的時候遇到了錯誤。那麼究竟是什麼樣的函數呢?根據錯誤對話框的信息,我們可以初步猜測是MSVCRT.dll中的_except_handler4_common。於是,我們需要查找一下當前進程中有關該過程的現狀,所以執行"x msvcrt!_except_handler*"命令,返回的結果也在上圖中的底部。在Windbg中,x是查找符號的命令,可以用來查找全局變數的地址或過程的地址。比如x kernel32!*顯示Kernel32.dll中的所有可見變數,數據結構和過程。*號是通配符,代替任意的字元串,為了查找全部的,我們需要使用該通配符。(其實如果你執行「x msvcrt!_except_handler4_common」你會發現沒有任何結果,也就是找不到,其實這也就是出現該錯誤的原因,我們後文分析。因此退一步不輸入"4_common",查找所有_except_handler過程) 結果告訴我們,進程中msvcrt.dll存有的過程有_except_handler2以及_except_handler3,而恰恰沒有_except_handler4。鑒於以上返回結果,我們可以初步斷定,錯誤的起因是因為程序不能執行MSVCRT.DLL中的_except_handler4_common過程,而且原因是當前缺少這個。此時,我們需要藉助Microsoft Dependency Walker進行輔助分析並且確認。 我們啟動Microsoft Dependency Walker,打開該dwmapi.dll,可以發現,該DLL文件的運行將會首先調用MSVCRT.DLL,而且下圖中也標示出來了,在當前調用的MSVCRT.DLL中,缺少一個函數"_except_handler4_common",這起好與我們看到的錯誤現象相以及Windbg分析的結果吻合。如下圖所示: 此時,我們可以進一步斷定,要麼是DLL版本不對,要麼就是dwmapi.dll有問題。而這個程序調用的是XP系統的%systemroot%\system32下面的MSVCRT.DLL,從移動飛信官方得知,該程序就是針對XP/Vista開發的,且朋友中文版XP SP3中運行得很正常,於是我確認了一下本機該文件的版本,結果是「7.0.2600.5512 (xpsp.080413-2111)」,看來沒有什麼問題,是版本7.0.2600。於是我們得查一查另外一個文件了——dwmapi.dll,為什麼它要載入MSVCRT.Dll並且調用其中並不存在的一個過程呢? 接下來,我們查看位於飛信文件夾下的dwmapi.dll。察看版本信息,得到「6.0.6000.16386 (vista_rtm.061101-2205)」,問題就在這里!看到了嗎?這個位於飛信安裝目錄下的文件怎麼會來自Vista正式發布版??怎麼會用到XP的程序執行之中???要知道,這個文件之所以能夠使用全部功能是因為在Vista環境之下,很多新的DLL文件中帶有新的函數,正好可以被它調用。那麼我們猜想,是不是Vista版本下的MSVCRT.DLL就存在一個新版本——即第4版的_exception_handler4呢?我們從Microsoft Windows Vista RTM中提取出位於%systemroot%\system32下面的MSVCRT.DLL,其版本為「7.0.6001.18000 (longhorn_rtm.080118-1840)」,然後再次使用Dependency Walker打開,發現其中果然存在該新的函數!即「_except_handler4_common」。如下圖所示: 到這里,問題就已經清楚了。正是由於本機的飛信客戶端在啟動時調用了用於Vista的DLL組件dwmapi.dll,而該DLL又要嘗試調用一個Vista下msvcrt.dll才有的過程,才出現了該錯誤提示。因為我們發現,該錯誤提示並不影響之後程序的正常使用,而且我們所使用的環境是Windows XP而非Vista,所以推斷該調用dwmapi.dll的過程是非必要的,於是將其重命名或是刪除到回收站,再次啟動飛信客戶端,錯誤提示消失了,迎來的是程序正常的使用…… 之後我查閱了大量的KB資料以及Visual Studio的MSDN資料,發現_except_handler是VC++編譯器自帶的一個內部異常處理。而版本4的_except_handler4_common handler又僅存在於Vista以及之後的系統之中。而且值得注意的是,很多這樣子的錯誤都是由於系統中存在有來自更高級版本系統的文件造成的,而文件的來源於一般有幾種,一般是修改系統時自己放進去的或者別的安裝程序帶入的,也有情況是盜版改版的操作系統中存有的,再有就是本例中的情形——安裝程序可同時用於Windows XP以及Windows Vista。可能是由於XP英文版與中文版的環境的不同,飛信客戶端的啟動選擇了載入調用為Vista准備的dwmapi.dll從而產生了此錯誤。 註:本例中並沒有介紹使用Dependency Walker的「Profile(剖析)」功能,因為該飛信客戶端的啟動不是靠單文件的,因此比較復雜,而且本例中因為該錯誤不能成功剖析整個啟動過程。藉助其他工具,可以得到,其實飛信客戶端的啟動過程是先通過Fetion.exe載入FetionFX.exe然後再載入「VMDotNet\v2.0.50727」下的FetionVM.exe進行的,於是我們可以只對FetionVM.exe進行剖析,而且當前環境也只能這樣了。剖析過後同樣能夠發現問題,如下圖所示:
⑦ 程序編譯過了,但是無法運行出結果是怎麼回事
編譯過了沒錯誤,說明你的代碼語法沒錯誤。運行結果不對,是你的代碼邏輯有問題,仔細檢查代碼邏輯流程是不是不對,調試調試。
⑧ 關於c語言程序函數入口地址即main函數地址問題
不同的系統環境,內存環境肯定不一樣,得到不同的必然的。
32位系統,地址為4個位元組,16進制,都應為8位的,
在你的結果里,應該都是把前面的0省略掉了哈
⑨ 有時Visual C++編譯後程序無法運行
這個說明你的程序執行期間對發生了錯誤,配陵建議把你工程下的Debug文件夾全部刪除,重新編譯一遍程序,當爛敬然,按照你說的,這個時候編譯應該沒有問題,所以你還要在程飢賣慎序中打斷點,調試一下,就可以找到問題出在哪裡了。
⑩ vs2008下用C寫了一個程序,在編譯連接的時候為什麼提示未定義入口點
你有沒有建立工程啊,在VC++ 2008中,要運行後綴為cpp的文件,必須在工程下!
文件->新建->項目->(項目迅判類型)Win32->(Visual Studio已安裝的模版)Win32控制台應用程序->(輸入項目名稱後)->下一步->(附加選項)空項目->完成
在左邊的窗口裡面,右鍵->添加->新建項,就可以閉昌困看到可以見了C++文件轎念了.輸入完名稱,就可以進行輸入了,把上面的代碼輸進去,Ctrl + F5,就可以運行了!
如果直接按F5的話,如果程序沒有錯誤,就會跳出,你會看不到結果,通常在測試自己的代碼有沒有錯誤時採用.