1. 程式人生 > >VC整合dll到資源中(也可是其他檔案)

VC整合dll到資源中(也可是其他檔案)

Cpp程式碼  收藏程式碼
  1. g_MakeResourceFromExe用於釋放資源DLL與SYS中ID為IDR_DLL1的WinIo32.dll  
  2. 和ID為IDR_SYS1的WinIo32.sys.ReleaseExe用於將檔案屬性置為只讀,隱藏,歸檔  
  3. 主要程式碼如下:  
Cpp程式碼  收藏程式碼
  1. bool CtestDlg::g_MakeResourceFromExe(CString szExPathName, CString szResName, int nResID)  
  2. {  
  3.     HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);  
  4.     if
    (hSrc == NULL) return false;  
  5.     HGLOBAL hGlobal = LoadResource(NULL,hSrc);  
  6.     if(hGlobal == NULL) return false;  
  7.     LPVOID lp = LockResource(hGlobal);  
  8.     DWORD dwSize = SizeofResource(NULL,hSrc);  
  9.     CFile file;  
  10.     if(file.Open(szExPathName,CFile::modeCreate|CFile::modeWrite))  
  11.     {  
  12.         file.Write(lp,dwSize);  
  13.         file.Close();  
  14.     }  
  15.     FreeResource(hGlobal);  
  16.     return true;  
  17. }  
  18. void CtestDlg::ReleaseDLL()  
  19. {//從資源DLL中自釋放WinIo32.dll自定義資源型別,ID=IDR_DLL1  
  20.     CString rc_dll = _T("WinIo32.dll");  
  21.     CString rc_sys = _T("WinIo32.sys");  
  22.     CFileFind find;  
  23.     if(!find.FindFile(rc_dll))  
  24.     {  
  25.         g_MakeResourceFromExe(rc_dll,_T("DLL"
    ),IDR_DLL1);  
  26.         //改變WinIo32.dll的屬性:只讀,隱藏,歸檔  
  27.         DWORD dwAttributes = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_READONLY;  
  28.         SetFileAttributes(rc_dll,dwAttributes);    
  29.     }  
  30.     if(!find.FindFile(rc_sys))  
  31.     {  
  32.         g_MakeResourceFromExe(rc_sys,_T("SYS"),IDR_SYS1);  
  33.         //改變WinIo32.dll的屬性:只讀,隱藏,歸檔  
  34.         DWORD dwAttributes = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_READONLY;  
  35.         SetFileAttributes(rc_sys,dwAttributes);    
  36.     }  
  37.     find.Close();  
  38. }  
Cpp程式碼  收藏程式碼
  1. 程式碼中再動態載入WinIo32.dll.並且找到dll中的方法進行呼叫.主要方法如下:  
Cpp程式碼  收藏程式碼
  1. typedef int (_stdcall *InitializeWinIoFun)();  
  2. InitializeWinIoFun InitializeWinIo = 0;  
  3. typedef int (_stdcall *GetPortValFun)(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);  
  4. //typedef int (__cdecl *MYPROC)(short int* , short int* , short );    
  5. GetPortValFun GetPortVal = 0;  
  6. typedef int (_stdcall *ShutdownWinIoFun)();  
  7. ShutdownWinIoFun ShutdownWinIo = 0;  
  8. HMODULE hDllInst = ::LoadLibrary(_T("WinIo32.dll"));  
  9. if (hDllInst)  
  10.     {  
  11.         InitializeWinIo = (InitializeWinIoFun)GetProcAddress(hDllInst, "InitializeWinIo");  
  12.         GetPortVal = (GetPortValFun)GetProcAddress(hDllInst, "GetPortVal");  
  13.         ShutdownWinIo = (ShutdownWinIoFun)GetProcAddress(hDllInst, "ShutdownWinIo");  
  14.     }  
  15.     int   bResult   =   InitializeWinIo();   

轉:http://danke54.iteye.com/blog/1704907

相關推薦

VC整合dll資源(可是其他檔案)

Cpp程式碼  g_MakeResourceFromExe用於釋放資源DLL與SYS中ID為IDR_DLL1的WinIo32.dll  和ID為IDR_SYS1的WinIo32.sys.ReleaseExe用於將檔案屬性置為只讀,隱藏,歸檔  主要程式碼如下:  Cpp程式碼

Python2.x編譯器列印中文出現亂碼的三種解決方案(本人以VS2017與VS Code為例,使用其他整合開發工具的參考下)

本文主要介紹了三種解決方案: 解決方案一:在需要列印的中文字元前加個u,用於標識所要列印的是一個Unicode字串。(我感覺著一種方法是最簡單和省事的,並且使用其他整合開發工具的若遇到類似的問題,也應該可以使用這種方法解決,具體大家可以在下方評論)(測試此方法不適合在Vis

(zt)如何執行一個資源執行程式

2010年07月08日 15:29:00 zaijzhgh 閱讀數:511 標籤: exe null

C# 基礎(十三)C# 軟體開發過程執行檔案.exe 出現bug,該怎麼排查、解決:找到出現bug的位置

一、簡介 之前是完成了寫軟體,從而實現軟體的基本功能。到了今天,需要對自己寫的可執行檔案.exe找bug了。那麼下面,我將結合自己的軟體的使用過程中,講自己的經驗融入進來,解釋下什麼是bug、以及該怎麼找Bug。 二、Bug的分類 主要參考: https://blog.csdn.ne

Spring+Mybatis整合讀取Jar的mapper配置檔案

在專案中通過Maven管理程式碼常常遇到將部分功能作為單獨模組進行開發,在新建的功能模組中將mapper檔案放置到resources資料夾下;專案中依賴該模組時遇到以下錯誤: Error updating database.  Cause: java.lang.Illega

利用certutil.exe實現在批處理(bat)嵌入執行檔案或者各種媒體、圖片之類二進位制檔案的簡單方法

實際上利用certutil.exe 把二進位制檔案(包括各種檔案,exe可執行程式,圖片,聲音,mp3) 經過base64編碼為文字,可以實現把這些檔案嵌入到批處理程式碼中。 有什麼用?: 舉個例子,批處理經常需要依賴其它命令列工具實現自動化指令碼,如果把這

dll工程如何生成lib檔案

新建了一個dll工程,除了生成dll檔案外,你還想生成相應的lib檔案,怎麼搞? 解決辦法: 為工程新增一個def檔案即可。 注意: 新增def檔案後,預設情況下,生成的lib檔案的名字與工程名字相同; 如果你想使用自定義的lib檔名,修改def的檔案內容即可。

Windows提取程序載入的DLL同目錄下的其他檔案

現在有如下需求:有一個檔案Example.exe放在載入進程序的一個kernel.dll的同級目錄下,現在要獲取該Example.exe的檔案路徑,程式如下所示: BOOL __getOtherFilePath() { HINSTANCE hr; WCHAR Examp

Xcode編譯完後,在Finder檢視執行檔案路徑和沙盒路徑

截圖技巧:Mac自帶截圖快捷鍵Shift + Command + 3,按下這個組合鍵,圖片自動儲存到桌面。 選擇Xcode的Preferences選單 開啟後選擇“Locations”選項 開啟後的Finder 進入《DerivedData》目錄就可以找到你的工程,可

android 通過反射訪問內部類(訪問其他apk的類)

//訪問某個屬性 Context mmsCtx = createPackageContext("com.android.lockscreen",  Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SE

VC如何呼叫其他執行程式

Q: 如何開啟一個應用程式 ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW ); 或 ShellExecute(this->m_hWnd,"open","notepad.exe","c:\\MyLog.log","",SW_SH

Lambda語句創建自定義類型時,指定某種特定類型,方法是在new與{}之間寫上類型名稱

特定 pan sel lambda語句 lam {} where distinct select 如: var fc =...ChildFath = fc.Select(c => new Child_Father { child = c.child, father =

duilib將xml和圖片合併到exe資源或者dll

直接上demo的編寫步驟了。 1.建立一個win32的空的工程用作demo工程。從其他工程複製stdafx.h、stdafx.cpp、testmain.cpp、mainwnd.h、mainwnd.cpp檔案過來使用。我是從TestAlphaWindow工程中複製過來的。 2.新增現有檔案

Unity實現控制物體以自定義的速度沿Y軸旋轉90度(自定義度數)後停止,然後返回原來位置

1、需要控制沿Y軸旋轉的物體,如下所示: 2、編寫控制該物體旋轉的指令碼,如下所示:  using UnityEngine; using System.Collections; public class Test_CycleRoate : MonoBehaviour {

centos 7安裝部署java jdk 8,設定java環境變數(超詳細,其他linux系統通過該方法安裝java,配置java環境變數)

前置配置 作業系統:CentOS Linux release 7.5.1804 Java版本號:jdk1.8.0_191 #OS版本號查詢 [[email protected] ~]$ cat

vc資源載入png圖片以及顯示

因要做一個小的登陸客戶端,所用圖片格式為png.但較少,所以想直接放到資源中.碰到的第一個問題是.net2003中載入png圖片到資源中總是不成功.試了下發現jpg也不行,jpg圖片會提示"不是正確的JPEG格式",後來用vc6.0開啟資原始檔載入成功的.vs2003中原因還未找到,有知道

【已解決】C#整合DLL庫到自己的exe程式

【問題】 已經實現了下載ST歌曲的小程式,但是由於其中註冊快捷鍵的功能,需要呼叫額外的一個dll庫,Interop.SHDocVw.dll,所以釋出的時候,除了釋出一個單獨的exe之外,還需要連帶dll一起釋出,很是不爽。 希望將此dll整合到exe中。 【解決過程】 1.從:

“System.NotSupportedException”型別的異常在 System.Data.Entity.dll 發生,但未在使用者程式碼進行處理 其他資訊: 在 LINQ to Entitie

“System.NotSupportedException”型別的異常在 System.Data.Entity.dll 中發生,但未在使用者程式碼中進行處理 其他資訊: 在 LINQ to Entities 查詢中無法構造實體或複雜型別“**Model.**Entity”。

linux 檢視使用資源的限制

檢視系統允許開啟檔案的最大個數(和記憶體有關)cat /proc/sys/fs/file-max檢視資源限制的詳細資訊:cat /proc/self/limits檢視程式預設資源的限制ulimit -a修改程式允許開啟檔案的最大個數ulimit -n 4096

c++ 實現字串替換字串,去掉字串特定字串

int string_replase(string &s1, const string &s2, const string &s3) { string::size_type pos = 0; string::size_type a = s2.si