請問可以在.Dll中寫入資料嗎? |
尚未結案
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
http://www.vclxx.org/DELPHI/AAAT102B.HTM SVERINFO.ZIP TVersionInfoResource 元件能夠讀取 Delphi 3 儲存於 EXE 檔中的程式版本資訊,並也能將版本資訊寫入 .DLL或 .RES 檔中 ( 2.35 版,附原始程式碼 ),作者 : Brad Stowers。 試看看把 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝各位前輩的指點!
感謝前輩ddy所提供的參考文章,真是一篇佳作.也特別感謝前輩n/a 分享這篇文章幫助後來者‧
另外補充一下,這篇文章來源於<<談Delphi編程中"流"的應用>>的第二個實例,其它部分可以在這裏找到: http://www.china-pub.com/computers/emook/wzq/074/info.htm 如SOS_admin兄所說:這篇文章不就是談"流"的嗎?但為什麼還騎驢覓驢的,問這問題呢?
"流"應用的實例我看到一些,但如何運用以解決這個問題我還不清楚,我是用顯式加載.DLL(即沒使用LoadLibrary函式).
主要有幾個問題:
1)如何知道.DLL開始地址,如何知道.DLL的大小.
2)寫入時是否需要定體,避免在入程中Windows移動體的位置?
3)TMemoryStream與TFileStream有何區別?解決這個問題用那一個較適合?
4)是否還有其它需要注意的問題? 感謝jackkcg前輩熱心指點,您提到的這個元件我閱讀了一下原始程式碼,但還沒找到頭緒,看來還需努力努力。
我想不論是寫入Exe,還是DLL都是應該可以做到的,ExeScope這種軟體不就可以這樣嗎?不僅能夠改變執行檔中的ResourceString,也能改變其中的Icon.
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
改變執行檔中的ResourceString
delphi的C:\Program Files\Borland\Delphi6\Demos\ResXplor
就是了
【轉貼】談Delphi編程中"流"的應用
http://delphi.ktop.com.tw/topic.php?topic_id=21606
這一篇嗎 哈哈
【問題】如何修改可執行檔或DLL中的圖標icon
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22599 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起 發表人 - jackkcg 於 2003/09/15 00:27:27 發表人 - jackkcg 於 2003/09/15 00:29:57
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝jackkcg前輩提供的文章!
我將RaynorPao前輩的文章試著用Delphi改寫了一下:
現在可以將A.DLL中編號為4094的ResourceString複製到B.DLL,並編號為:1234
Code如下:
procedure TForm1.Button1Click(Sender: TObject); var hDLL:THandle; hResInfo:DWORD; hResLoad:DWORD; hResUpdate:DWORD; lpBuf:Pointer; begin hDll:=LoadLibrary('A.dll'); // Find resource hResInfo:=FindResource(hDll, '#4094', RT_STRING); // Load resource hResLoad:=LoadResource(hDll, hResInfo); // Lock resource lpBuf:=LockResource(hResLoad); // Begin update resource. hResUpdate:=BeginUpdateResource('B.DLL', FALSE); // Update resource UpdateResource(hResUpdate,RT_STRING, '1234', 0,lpBuf, SizeofResource(hDll, hResInfo)); // End update resource EndUpdateResource(hResUpdate, FALSE); FreeLibrary(hDll); end;但問題是我只想在A.DLL的ResourceString中增加幾個編號,將我想保存的EDit.text中的資料放入A.DLL即可,上面的方法我不知如何修改才能做到,希望各位先進指點,謝謝! 另外,jackkcg前輩所提ResXplor在delphi5或delphi6都有,但我試了一下但是好像不能改變行檔中的ResourceString. |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
請各位先進指點,找出下面Code存在問題(不能將資料寫入 '1'中 ),謝謝!
procedure TForm1.Button1Click(Sender: TObject); var Handle :THandle; s :string; s2 :WideChar; begin s:=Edit1.text; StringtoWideChar(s, @s2, sizeof(s)); Handle := BeginUpdateResource('A.dll', false); UpdateResource(Handle,RT_STRING,'1',0,@s2,sizeof(WideChar)); EndUpdateResource(Handle, false); end;發表人 - mathewzhao 於 2003/09/15 19:28:20 |
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
另外,jackkcg前輩所提ResXplor在delphi5或delphi6都有,但我試了一下但是好像不能改變行檔中的ResourceString.
因為那範例是去看 他沒寫 更換部份 【問題】如何修改可執行檔或DLL中的圖標icon
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22599
這理面的連結 如果還沒失效的話 理面的好東西 令人髮指 哈哈
包子大人 也是粉利害的PE高手 在上面那篇 他也有說明 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝jackkcg前輩的熱心指點!
現在已經可以寫入DLL中,Code如下:
procedure TForm1.Button1Click(Sender: TObject); var Handle :THandle; s :string; s2:PWideChar; iMemAlloc:Integer; begin s:=Edit1.text; iMemAlloc:=Length(s)*SizeOf(WideChar); s2:= AllocMem(iMemAlloc); StringToWideChar(s,S2,iMemAlloc); Handle := BeginUpdateResource('A.dll',false); UpdateResource(Handle,RT_STRING,'1',LANG_NEUTRAL,s2,iMemAlloc); EndUpdateResource(Handle, false); end;但是存在3個問題,如下圖所示: 1.在Edit1中輸入12345678,但保存在dll中變為:23456781 2.在.dll中有編號1的ResourceString,UpdateResource(...)後,沒有將原有的編號1的ResourceString Update (OverWrite),而是又新增一個編號1的ResourceString,如下圖所示有2個編號 1 的ResourceString 3.下圖右邊23456781前面的編號:0 是怎樣得到的呢? |
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
mathewzhao 兄 幫忙一下
1 我不會寫程式
2 別說庵是前輩
有一隻鐵槌叫 ResHacker.exe 你玩看看 他和你的情況一樣嗎?
注意 動作的使用方式 如何用2進位編輯 應該是你的資源名稱未定義 我瞎猜的 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
各位先進好!
Q2 的問題已經解決:
procedure TForm1.Button1Click(Sender: TObject); var Handle :THandle; s :string; s2:array [0..254] of WideChar; begin s:=Edit1.text; StringToWideChar(s,@s2[0],Length(s)*SizeOf(WideChar)); ShowMessage(WideCharToString(@s2[0])); Handle := BeginUpdateResource('A.dll',false); UpdateResource(Handle,RT_STRING,makeIntResource(1),MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_TRADITIONAL),@s2[0],Length(s)*SizeOf(WideChar)); EndUpdateResource(Handle, false); end;出現Q1和Q3的可能原因: Q3:將the name of the resource和The ID of the string混淆了,UpdateResource 是 Update the name of the resource 所指資源(這個the name 下,可能帶有多個不同ID的string). 但我想Update的是指定ID 所指資源 . Q1:感覺指標使用是疑問手? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |