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

關於 DLL

答題得分者是:pceyes
edens
一般會員


發表:2
回覆:7
積分:0
註冊:2008-10-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-13 09:22:24 IP:125.228.xxx.xxx 訂閱

請問在 DLL 中有辦法直接呼叫 exe 檔嗎

(當然先決條件是該 DLL 檔必須為某程式的插件)
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-13 10:51:54 IP:124.199.xxx.xxx 訂閱
dll載入時即成為母程式的function或procedure
它執行exe時就一如是母程式在執行外部程式一樣
所以如果有例外事件發生時,母程式一樣會受到遷連,不能排除在外的。
那怎會問dll能不能執行外部程式!
------
努力會更接近成功
edens
一般會員


發表:2
回覆:7
積分:0
註冊:2008-10-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-13 12:24:08 IP:210.60.xxx.xxx 訂閱
那我應該要怎麼做 ?

我的意思是以外掛為主直接呼叫外部 exe 檔?
編輯記錄
edens 重新編輯於 2008-10-13 12:33:37, 註解 無‧
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-14 06:24:13 IP:220.141.xxx.xxx 訂閱

===================引 用 edens 文 章===================
那我應該要怎麼做 ?
記得在書店看到一本書好像是C語言的入門書,書名好像是{如何不在電腦前發呆},我看這篇回文看二次,也呆了二次;我想,您應該至少將您目前的程式碼列出(精簡過的,或有問題的部份,太多的內容,恐怕沒人有空去閱讀它),如果能將它(例子)上傳至求助檔案上傳區,那更好了。
我的意思是以外掛為主直接呼叫外部 exe 檔?
外掛的方式為何,很難想像為何外掛不能直接呼叫外部exe檔!
------
努力會更接近成功
edens
一般會員


發表:2
回覆:7
積分:0
註冊:2008-10-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-14 09:08:15 IP:125.228.xxx.xxx 訂閱
www.peid.info/BobSoft/Source/Blank.Plugin.Source.zip

function RunPlugin(hMainDlg: HWND; szFname: PChar) : String;
begin
// pass filename to plugin
// pass hwnd of PEiD, or PE-Tools, if useful to you
Target_Filename := szFname;
Caller_Handle := hMainDlg;

// Put your code here, and in Form1.create as usual

Form1 := TForm1.Create(Nil);
Try
Form1.ShowModal;
Finally
Form1.Free;
End;
// displayed in PEiD message box, where it would say packer name
result := 'Done :)';
end;

他預設是呼叫 form1 但是改成呼叫外部執行該怎做!
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-14 11:14:11 IP:61.30.xxx.xxx 訂閱
1. 移除FORM1
Project->Remove From Project...
選Unit1.pas->OK

2.
library Blank; // Rename this, it becomes the name of the DLL
uses
Windows, Shellapi;

..................
Type
DLL_RET_MSG = Record
szMsgText : PChar;
szMsgHead : PChar;
dRetVal : DWORD;
dRetExVal : DWORD;
dFlags : DWORD;
End;

// 以下是從UNIT1.PAS 拷備來的宣告
var
Target_Filename : String;
Caller_Handle : HWND;

// -----------------------------------------------------------------------------------------
// The main procedure.. If you don't want a form, remove it here and replace
// with your code (and remove unit1 above)
//
// 主要程序.. 假如你不要使用表單, 移除它取代自
// 你的代碼(同時移除Unit1)


function RunPlugin(hMainDlg: HWND; szFname: PChar) : String;
begin

// pass filename to plugin
// pass hwnd of PEiD, or PE-Tools, if useful to you

Target_Filename := szFname;
Caller_Handle := hMainDlg;

// Put your code here, and in Form1.create as usual
// 放置你的代碼

// 舊的代碼
// Form1 := TForm1.Create(Nil);
// Try
// Form1.ShowModal;
// Finally
// Form1.Free;
// End;

// 新的代碼
ShellExecute(0, pchar('notepad.exe'), nil, nil, nil, SW_SHOWNORMAL);

// displayed in PEiD message box, where it would say packer name
result := 'Done :)';

end;
------
努力會更接近成功
edens
一般會員


發表:2
回覆:7
積分:0
註冊:2008-10-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-14 13:04:18 IP:125.228.xxx.xxx 訂閱
不能用,沒有反應...
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-10-14 16:08:46 IP:220.141.xxx.xxx 訂閱
試試這樣行不行
ShellExecute(0, 'open', pchar('notepad.exe'), nil, nil, SW_SHOWNORMAL);
若再不行,要Po出你的執行檔給我們看了,您之前的檔案只有Dll而已。
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-10-14 16:10:25, 註解 無‧
edens
一般會員


發表:2
回覆:7
積分:0
註冊:2008-10-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-10-14 16:56:37 IP:125.228.xxx.xxx 訂閱
var
Target_Filename : String;
Caller_Handle : HWND;

function RunPlugin(hMainDlg: HWND; szFname: PChar) : String;
begin

// pass filename to plugin
// pass hwnd of PEiD, or PE-Tools, if useful to you
Target_Filename := szFname;
Caller_Handle := hMainDlg;
// Put your code here, and in Form1.create as usual
ShellExecute(0, PChar('open'),pchar('unpacker.exwe'),nil, nil, SW_SHOW);

// displayed in PEiD message box, where it would say packer name
result := 'Done';
end;

以上是代碼

執行檔在這下載
www.peid.info/download.html

不過只有畫面閃爍.....就沒有執行檔
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-10-14 17:57:21 IP:220.141.xxx.xxx 訂閱
延伸檔名好像不對吧!
會閃,就表示程式有反應了,改用筆記本notepad.exe或小算盤calc.exe試試看吧!
===================引 用 edens 文 章===================
var
Target_Filename : String;
Caller_Handle : HWND;

function RunPlugin(hMainDlg: HWND; szFname: PChar) : String;
begin

// pass filename to plugin
// pass hwnd of PEiD, or PE-Tools, if useful to you
Target_Filename := szFname;
Caller_Handle := hMainDlg;
// Put your code here, and in Form1.create as usual
ShellExecute(0, PChar('open'),pchar('unpacker.exwe'),nil, nil, SW_SHOW);

// displayed in PEiD message box, where it would say packer name
result := 'Done';
end;

以上是代碼

執行檔在這下載
www.peid.info/download.html

不過只有畫面閃爍.....就沒有執行檔
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-10-14 17:58:02, 註解 無‧
edens
一般會員


發表:2
回覆:7
積分:0
註冊:2008-10-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-10-14 18:08:44 IP:125.228.xxx.xxx 訂閱
嗯,原來他程式本身有一個小 Bug,謝謝你了!
編輯記錄
edens 重新編輯於 2008-10-14 18:11:01, 註解 無‧
edens 重新編輯於 2008-10-14 18:14:05, 註解 無‧
系統時間:2017-10-24 4:46:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!