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

請問如何將一個MID 的專案包進dll 裡面

尚未結案
seaphone
一般會員


發表:5
回覆:9
積分:2
註冊:2004-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-26 17:49:35 IP:140.112.xxx.xxx 未訂閱
小弟現在有一個MID 的project,我這個程式有call 別的dll 而且也有用到兩三個from 那如何能將我這個程式包進一個dll 裡面給別的成去呼叫呢...? 其實我自己的程式本身就有一個完整個執行程序 只是我想要plug-in 到別人的程式上 只要別人的程式按一個buttom 就可以呼叫我這個程式去作我的事 然後我再將結果回傳給他 請問要怎樣包呢...? 謝謝..
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-28 17:42:44 IP:219.68.xxx.xxx 未訂閱
seaphone 您好..一般要包裝外部檔案的方法都是利用RC檔或RES檔.. 請參考以下文章 如何讓程式附加檔案一併使用 ? >
seaphone
一般會員


發表:5
回覆:9
積分:2
註冊:2004-07-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-05 14:47:53 IP:140.112.xxx.xxx 未訂閱
引言: seaphone 您好..一般要包裝外部檔案的方法都是利用RC檔或RES檔.. 請參考以下文章 如何讓程式附加檔案一併使用 ? > < face="Verdana, Arial, Helvetica"> geniustom 您好: 那請問一下因為我的程式裡面用到的function是別人的library 我不但要把project manager 加入他們的 .lib 而且很奇怪的是之前還要 他們的.dll 檔..很奇怪... 後來不知道怎麼了又不用了, 那這樣的話是說我只要把我compiler 的 .exe 檔包進 .rc 裡面後 別人call 到我的程式時只要去 .rc 檔裡面呼叫.exe就可以了嗎..? 還是說他們的 .dll 檔也要一起加到.rc 裡面? 謝謝..很抱歉因為還是有很多不懂....
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-05 21:10:10 IP:219.68.xxx.xxx 未訂閱
引言: geniustom 您好: 那請問一下因為我的程式裡面用到的function是別人的library 我不但要把project manager 加入他們的 .lib 而且很奇怪的是之前還要 他們的.dll 檔..很奇怪...
這是當然的了..假如他的LIB需要用到DLL檔..您加入他了LIB當然也需要DLL檔了
引言: 後來不知道怎麼了又不用了,
我想可能是因為那個程式所需的DLL檔..在WINDOWS\SYSTEM裡面已經有一份了.. 程式在呼叫DLL時..都會去SYSTEM找有沒有這個檔案..所以看起來好像不用附加DLL 如果SYSTEM沒有..OS才會去找您程式的所在目錄有沒有
引言: 那這樣的話是說我只要把我compiler 的 .exe 檔包進 .rc 裡面後 別人call 到我的程式時只要去 .rc 檔裡面呼叫.exe就可以了嗎..?
您不是要包DLL嗎..怎麼又變成包EXE了? 別人call 到我的程式時???不懂您的意思.. RC檔只是先將您要執行所需的附加檔案..包裝到您的執行檔中.. 在程式執行時期要把它解出放再某一個路徑..然後再用您的程式去讀她 只要去 .rc 檔裡面呼叫.exe<----------不是呼叫..是要解出來!!!
引言: 還是說他們的 .dll 檔也要一起加到.rc 裡面? 謝謝..很抱歉因為還是有很多不懂....
OK..我懂您的意思了..您的意思是說..您的A.EXE用到了A.DLL..要讓B.EXE CALL 那好..我說清楚點.. 1...A.EXE在編譯時要加入A.RC..A.RC裡面要加入A.DLL 2...當A.EXE執行時..要先把A.DLL解出來..才能呼叫 3...B.EXE編譯時..要先在B.RC裡面加入A.EXE 4...當B.EXE執行時..要先把A.EXE解出來..並執行A.EXE 5...此時A.EXE會把A.DLL解出來...您的B.EXE完全不用管這件事 這麼說您了解了嗎?? 問問題最好是一步一步說明您的目的..別人才比較瞭解您想做什麼.. 發表人 -
seaphone
一般會員


發表:5
回覆:9
積分:2
註冊:2004-07-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-07 11:05:57 IP:61.219.xxx.xxx 未訂閱
geniustom  您好:
引言: 我想可能是因為那個程式所需的DLL檔..在WINDOWS\SYSTEM裡面已經有一份了.. 程式在呼叫DLL時..都會去SYSTEM找有沒有這個檔案..所以看起來好像不用附加DLL 如果SYSTEM沒有..OS才會去找您程式的所在目錄有沒有
當時是因為可能我有把路徑指到另一個有放 a.dll 的資料夾, 所以可能就不用把他call 到system 資料夾, 不過很奇怪的是當時一開始的時候,我有把路徑指到放a.dll 的資料夾, 他還是找不到, 一定要我把 a.dll copy 到system 資料夾才行....:( 然後我把整個專案移到另一個電腦去寫的時候, 就不用還要copy 到system 資料夾裡面了........ 可以請問一個問題嘛, 就是當時我有把我的程式compiler 成 a.exe 檔後 將a.exe 和所需要的 a.dll 放到別的沒有灌 BCB電腦的資料夾, 結果是可以run 的, 那這樣的話不就沒有用到 .lib 檔了嘛..? 那意思是說在是在 debug 模式才需要用到 .lib 檔嘛..? 還是從頭到尾只要用到 .dll 檔其實就可以了呢..? 謝謝
引言: OK..我懂您的意思了..您的意思是說..您的A.EXE用到了A.DLL..要讓B.EXE CALL 那好..我說清楚點.. 1...A.EXE在編譯時要加入A.RC..A.RC裡面要加入A.DLL 2...當A.EXE執行時..要先把A.DLL解出來..才能呼叫 3...B.EXE編譯時..要先在B.RC裡面加入A.EXE 4...當B.EXE執行時..要先把A.EXE解出來..並執行A.EXE 5...此時A.EXE會把A.DLL解出來...您的B.EXE完全不用管這件事 這麼說您了解了嗎?? 問問題最好是一步一步說明您的目的..別人才比較瞭解您想做什麼.. < face="Verdana, Arial, Helvetica"> 您實在是太厲害了, 我的問題的意思你都幫我說很清楚... 其實我的意思就是這樣, 謝謝囉....:)
seaphone
一般會員


發表:5
回覆:9
積分:2
註冊:2004-07-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-07 11:08:28 IP:61.219.xxx.xxx 未訂閱
啊...對不起, 我忘了說還有我是希望別人的程式裡面 已經有開一個圖檔, 那我是希望他在按下一個按鈕後執行我的程式 順便把他那個圖檔能夠傳到我程式裡面 然後我處理完再把圖回傳回去... 那這樣是可以做到嘛....? 謝謝...
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-07 17:44:44 IP:219.68.xxx.xxx 未訂閱
引言: 可以請問一個問題嘛, 就是當時我有把我的程式compiler 成 a.exe 檔後 將a.exe 和所需要的 a.dll 放到別的沒有灌 BCB電腦的資料夾, 結果是可以run 的, 那這樣的話不就沒有用到 .lib 檔了嘛..? 那意思是說在是在 debug 模式才需要用到 .lib 檔嘛..? 還是從頭到尾只要用到 .dll 檔其實就可以了呢..? 謝謝
先回答您這個問題..只要您編譯成EXE了..裡面自然會包含動態連結DLL裡面的部份.. 所以就不需要.LIB...
引言: 啊...對不起, 我忘了說還有我是希望別人的程式裡面 已經有開一個圖檔, 那我是希望他在按下一個按鈕後執行我的程式 順便把他那個圖檔能夠傳到我程式裡面 然後我處理完再把圖回傳回去... 那這樣是可以做到嘛....? 謝謝...
因為您有兩支EXE程式..要把圖檔的記憶體位址空間傳給另一個執行檔 實作上是可行..但是挺困難的.. 比較建議的方法是直接共用一個已存在的圖檔即可.. B.EXE在CALL A.EXE時..只要加入圖檔檔名的參數..然後再A.EXE中開啟圖檔 開好之後再回存到另外一個檔..您的B.EXE在去讀A.EXE處理完的目的檔.. 即可...傳參數的方法可參考以下..(寫在A.EXE中)您再視需要修改 < class="code"> procedure TForm1.FormActivate(Sender: TObject); begin if (ParamStr(1)<>'') and (ParamStr(2)<>'') then begin image1.Picture.LoadFromFile(ParamStr(1)); //讀檔 //....您要做的處理 image1.Picture.Bitmap.SaveToFile(ParamStr(1)); //存檔 end; end; 然後再B.EXE裡面..只要將A.EXE解出來後..使用 winexec('C:\A.EXE "C:\AA.JPG" "C:\BB.JPG"',0); 即可透過A.EXE將AA.JPG處理後..轉存成BB.JPG 另外..如果您想使用..當呼叫A.EXE後..等待A.EXE結束..B.EXE才能繼續運作的話.. 可參考這篇 呼叫外部程式,並且等它結束! > 發表人 -
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-07 17:55:40 IP:219.68.xxx.xxx 未訂閱
OH..SORRY..忘了這是BCB版..您先轉成C語言試看看吧
seaphone
一般會員


發表:5
回覆:9
積分:2
註冊:2004-07-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-08 15:16:57 IP:140.112.xxx.xxx 未訂閱
引言: 先回答您這個問題..只要您編譯成EXE了..裡面自然會包含動態連結DLL裡面的部份.. 所以就不需要.LIB... 因為您有兩支EXE程式..要把圖檔的記憶體位址空間傳給另一個執行檔 實作上是可行..但是挺困難的.. 比較建議的方法是直接共用一個已存在的圖檔即可.. B.EXE在CALL A.EXE時..只要加入圖檔檔名的參數..然後再A.EXE中開啟圖檔 開好之後再回存到另外一個檔..您的B.EXE在去讀A.EXE處理完的目的檔.. 即可...傳參數的方法可參考以下..(寫在A.EXE中)您再視需要修改 < class="code"> procedure TForm1.FormActivate(Sender: TObject); begin if (ParamStr(1)<>'') and (ParamStr(2)<>'') then begin image1.Picture.LoadFromFile(ParamStr(1)); //讀檔 //....您要做的處理 image1.Picture.Bitmap.SaveToFile(ParamStr(1)); //存檔 end; end; 然後再B.EXE裡面..只要將A.EXE解出來後..使用 winexec('C:\A.EXE "C:\AA.JPG" "C:\BB.JPG"',0); 即可透過A.EXE將AA.JPG處理後..轉存成BB.JPG 另外..如果您想使用..當呼叫A.EXE後..等待A.EXE結束..B.EXE才能繼續運作的話.. 可參考這篇 呼叫外部程式,並且等它結束! > < face="Verdana, Arial, Helvetica"> 很抱歉可能一開始沒有說清楚 雖然我是有提到可不可以把結果回傳之類的話.... 下次會注意..謝謝...:) > 還有對不起,
seaphone
一般會員


發表:5
回覆:9
積分:2
註冊:2004-07-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-08 16:05:10 IP:140.112.xxx.xxx 未訂閱
引言: //執行檔載入方式(在此以解壓縮為例) ShellExecute(HInstance,"open"," E1 ","d:\\a.zip d:\\ ", "\tmppath", SW_HIDE ) ; Application->MessageBox("解壓縮完成", "OK", IDOK ) ;
對不起我忘了問.. 這個是我瀏覽看到的程式碼, 只有講到zip檔 那請問我要怎樣才能把我的 a.exe 解出來呢..? 謝謝...
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-08 16:38:02 IP:219.68.xxx.xxx 未訂閱
引言:
引言: //執行檔載入方式(在此以解壓縮為例) ShellExecute(HInstance,"open"," E1 ","d:\\a.zip d:\\ ", "\tmppath", SW_HIDE ) ; Application->MessageBox("解壓縮完成", "OK", IDOK ) ;
對不起我忘了問.. 這個是我瀏覽看到的程式碼, 只有講到zip檔 那請問我要怎樣才能把我的 a.exe 解出來呢..? 謝謝...
我想您還是沒有真正的看過文章內容..TRACE過程式..看您問的問題就知道您 並沒有把我之前我貼的網址裡面的內容弄懂了.. RC檔並不是用"解"的..要用一個TResourceStream類別 請參考 [推薦] class="code"> void __fastcall TForm1::Button3Click(TObject *Sender) { char exefile[100], tmppath[100] ; unsigned long ret ; //檢查 pkunzip.exe是否已經存在 GetTempPath( 100, tmppath ) ; strcpy( exefile ,(AnsiString(tmppath) AnsiString("\\pkunzip.exe") ).c_str() ) ; ret = GetFileAttributes( exefile ) ; if( ret == 0xffffffff ) { //不存在,則分離出 pkunzip.exe TResourceStream &rs = *new TResourceStream( (int)HInstance, AnsiString("unzip"),"EXEFILE" ) ; rs.SaveToFile( AnsiString(exefile) ) ; delete &rs ; } 就是把一個檔案從EXE中分離出來的範例了 還有..關於WINEXEC..在BCB..您的B.EXE要執行A.EXE..參考這篇文章就行了 【BCB】【問題】如何讓自己寫的程式可以另外開啟"小算盤"? http://delphi.ktop.com.tw/topic.php?topic_id=55573 至於您說包DLL..解出來會很慢..我想..可能是因為您一直以為RC檔會做壓縮吧.. RC檔只是原始檔完全不動的內嵌在EXE檔中.. 怎麼解?說穿了只是將那一個區段還原出來而已 怎麼還原??用TResourceStream.. 怎麼CALL? 用WINEXEC或ShellExecute.. 麻煩您"詳細"閱讀之前所有回應您的文章...答案都在其中 =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就
seaphone
一般會員


發表:5
回覆:9
積分:2
註冊:2004-07-22

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-09 15:25:33 IP:140.112.xxx.xxx 未訂閱
引言: 至於您說包DLL..解出來會很慢..我想..可能是因為您一直以為RC檔會做壓縮吧.. RC檔只是原始檔完全不動的內嵌在EXE檔中.. 怎麼解?說穿了只是將那一個區段還原出來而已
geniustom 您好: 我差不多都已經了解了, 可能是因為我對rc 的一些機本概念還不熟吧 所以可能會一直會錯意... 不過想說的是, 直接把圖包在.rc裡面去load圖出來 執行起來會很慢, 那如果是我直接在opendialog 去load 圖然後再用 scanline 去存成二微陣列的話就不會那麼久, 我進去trace 程式的時後, 就發現慢是因為在scanline bitmap 物件 那邊特別久, 所以才會以為他因為要去一直讀圖才會那麼慢...< > 麻煩妳那麼多時間,而且又學了不少東西,謝謝....< >
系統時間:2024-04-28 2:51:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!