線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1466
推到 Plurk!
推到 Facebook!

建立DLL時遇到要使用Form上的元件該怎麼辦

答題得分者是:malanlk
我叫ㄚ丸
一般會員


發表:16
回覆:35
積分:10
註冊:2005-07-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-09 18:43:45 IP:140.129.xxx.xxx 未訂閱
各位前輩 你們好 小弟學著使用DLL檔來建立自己的函式庫遇到一個問題 請前輩可以指導一下小弟  謝謝 問題如下 一般在寫 2值化的處理 都會習慣用 ScrollBar 來幫忙調整 臨界值,然後用Edit來秀出所調整的值 因此我在DLL體下寫的2值化的函式法如下  
 
void __declspec(dllexport) __stdcall Threshold(Graphics::TBitmap *TBmp) { Byte *ptr_b; int gray; int threshold_1=StrToInt(Form1->Edit1->Text); <<<<<這裡出錯 int threshold_2=StrToInt(Form1->Edit2->Text); <<<<<這裡出錯 for(int j=0;jHeight;j ) { ptr_b=(Byte*)TBmp->ScanLine[j]; for(int i=0;iWidth;i ) { gray=ptr_b[i*3]; gray=ptr_b[i*3 1]; gray=ptr_b[i*3 2]; if(threshold_1<=gray && gray<=threshold_2) { gray=255; } else { gray=0; } ptr_b[i*3]=(Byte)gray; ptr_b[i*3 1]=(Byte)gray; ptr_b[i*3 2]=(Byte)gray; } } } 但在 Build時會顯示 Error Undefined Form1 我想問題是出在 沒有 Form1這個元件 那請問如果要寫的DLL函式需要用到Form裡面的元件(如ScrollBar Edit 等等) 該怎麼辦呢???
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-09 21:43:29 IP:140.118.xxx.xxx 未訂閱
#include 
#include 
#pragma hdrstop
#include "Form.h"
#pragma argsused
extern "C" __declspec(dllexport) int _stdcall ShowAbout()
{
        Form1=new TForm1(NULL);
        Form1->ShowModal();
        Form1->Release();
        delete Form1;
}
這是我在dll使用Form的方法,先開啟dll project,再開一個Form....接下來你應該會了
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-10 08:30:26 IP:203.69.xxx.xxx 未訂閱
照你的程式來看 這個函數其實應該獨立運作, 我建議增加參數    void __declspec(dllexport) __stdcall Threshold(Graphics::TBitmap *TBmp, int iStart, int iEnd) { Byte *ptr_b; int gray; int threshold_1=iStart; //StrToInt(Form1->Edit1->Text); <<<<<這裡出錯 int threshold_2=iEnd; //StrToInt(Form1->Edit2->Text); <<<<<這裡出錯
我叫ㄚ丸
一般會員


發表:16
回覆:35
積分:10
註冊:2005-07-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-10 15:08:44 IP:140.129.xxx.xxx 未訂閱
謝謝 前輩的回答 小弟昨晚努力的思考後 "間接"的解決問題了 我的方式如下 先假設DLL所產生的CPP檔為副程式 然後設我們另開專案的CPP檔為主程式 我在副程式中開一動態記憶體的方式去改值(2值化臨界值)然後在主程式用一個小副程式用return Form1->ScrollBar1->Poition;的方式傳回更改動態記憶體的值 以達到可以利用ScrollBar1去改變DLL裡面的值(感覺上好像太複雜 不過因自己想出來 還有一點成就感囉^^")    To GGL 前輩 你的方式看起來應該是正規的做法 不過因為自己的程式很弱又第一次玩DLL所以也沒辦法完全看懂 不過有時間我會馬上玩玩看前輩的方法 若有不懂在請前輩指導囉    To malanlk 前輩 前輩提的方式和小弟的想法似乎有類似的地方都是用另一變數去改值  但小弟一時間無法看出前輩的方式是要如何即時去修改值(達到ScrollBar1去改值的效果) 很抱歉 我會多多努力的^^"  
 
void __declspec(dllexport) __stdcall Threshold(Graphics::TBitmap *TBmp, int iStart, int iEnd) { Byte *ptr_b; int gray; int threshold_1=iStart; int threshold_2=iEnd;
系統時間:2024-05-11 16:37:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!