全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1373
推到 Plurk!
推到 Facebook!

請問可以在.Dll中寫入資料嗎?

尚未結案
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-10 20:12:42 IP:219.145.xxx.xxx 未訂閱
各位先進好! 我的程式中有一些資料不想保存在登錄資料庫和.INI中,因此想保存在.DLL中,不知有沒有辦法可以做到,謝謝!
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-10 21:22:32 IP:61.155.xxx.xxx 未訂閱
mathewzhao 兄: 我想最好得借助資料庫、文件、注册表等,如果用dll保存的话我没有实验过,不过用exe保存还是可以的。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31104
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-11 00:36:27 IP:211.74.xxx.xxx 未訂閱
如果只是怕資訊外流,保存在 exe /dll 裡仍然有可能被有心人士得知 建議仍然可使用registry 或是 inifile 並配合資料加密 若該資訊不存在或是解碼後錯誤,則不予啟動程式    關於加密部份可參考 【分享】AES加密演算法Delphi程式範例  http://delphi.ktop.com.tw/topic.php?topic_id=28295  參考看看    
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-12 11:53:22 IP:202.100.xxx.xxx 未訂閱
感謝兩位前輩的熱心指點! 兩位前輩所提方法從不同角度提出了2種間接的方法,非常感謝.但因其它原因,晚輩現在只能在.DLL中保存資料. 現在已經可以在程式執行時修改.DLL中的資料,但是在修改後不知如何將修改後的資料保存回.DLL中,是否需要使用TMemoryStream或TFileStream. 希望各位先進指點!
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-12 17:28:58 IP:61.155.xxx.xxx 未訂閱
mathewzhao 兄: 上面的 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31104 资料中就是关于流的使用,您可以用在DLL中试验一下哦!
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-12 20:13:37 IP:61.221.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-14 17:26:29 IP:61.185.xxx.xxx 未訂閱
感謝各位前輩的指點!      感謝前輩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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-15 00:23:31 IP:61.64.xxx.xxx 未訂閱
改變執行檔中的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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-15 13:18:41 IP:61.155.xxx.xxx 未訂閱
这儿有很多关于各种流的使用资料及相关实例哦! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34771
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-15 13:59:49 IP:61.150.xxx.xxx 未訂閱
感謝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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-15 19:27:23 IP:219.145.xxx.xxx 未訂閱
請各位先進指點,找出下面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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-16 00:38:44 IP:61.64.xxx.xxx 未訂閱
另外,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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-09-16 19:16:28 IP:219.145.xxx.xxx 未訂閱
感謝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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-09-16 19:32:19 IP:61.64.xxx.xxx 未訂閱
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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-09-18 18:15:27 IP:61.185.xxx.xxx 未訂閱
各位先進好! 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:感覺指標使用是疑問手?
系統時間:2024-09-02 23:00:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!