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

如何將ListBox傳入dll的函式中

 
hank0272
一般會員


發表:2
回覆:3
積分:1
註冊:2006-11-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-07 10:12:39 IP:203.73.xxx.xxx 訂閱
各位先進,大家好:
最近因為程式需要,所以在改成dll架構時,發生了一個問題:執行load dll的程式中,似乎不能傳進一個TListBox。希望各位先進能給小弟一些指導!謝謝!
在寫dll函式以VCL的方式如下:
Dll.CPP:
void __stdcall f_Edit(TListBox *List1)//需要用到這個ListBox去做一些處理
{
List1->Visible=false;
List1->Clear();
List1->Items->LoadFromFile(ExtractFilePath(Application->ExeName) "List");//之後對其內容做處理
...
}
Dll .h:
extern "C"{__declspec(dllexport) void __stdcall f_Edit(TListBox *List1);}

Run_Dll.cpp:
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
typedef int (*GETNUMBER)(void);
HINSTANCE dll;
GETNUMBER showEdit;
dll=::LoadLibrary("Editing.dll");//dll的專案為Editing.bpr
if(dll!=NULL)
{
showEdit=(GETNUMBER)::GetProcAddress(dll, "_f_Edit");
if(showEdit!=NULL)
{
TListBox *List1 = new TListBox(this);
showEdit(List1);//這行會出錯,錯誤訊息: E2226 Extra parameter in call
delete List1;
}
else
{
ShowMessage("Error GetProcAddress");
}
FreeLibrary(dll);
}
else
{
ShowMessage("Error LoadLibrary");
}
}
小弟用的是bcb 5.0,在Windows XP中執行。
coldwind1234
一般會員


發表:3
回覆:25
積分:20
註冊:2006-08-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-08 00:42:09 IP:220.134.xxx.xxx 未訂閱
getNumber=(GETNUMBER)::GetProcAddress(dll, "_f_Edit");
這行錯了
必需要將GetProcAddress(dll, "_f_Edit");轉型成
void __stdcall f_Edit(TListBox *List1) 這種型式
試試吧:


hank0272
一般會員


發表:2
回覆:3
積分:1
註冊:2006-11-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-11-08 09:42:02 IP:203.73.xxx.xxx 訂閱
謝謝coldwind1234大大的回覆,不過小弟初寫dll沒有多久,對於您所指出的型式不懂,能否請coldwind1234大大再次的給予指導呢?謝謝您的幫忙!
===================引 用 文 章===================
getNumber=(GETNUMBER)::GetProcAddress(dll, "_f_Edit");
這行錯了
必需要將GetProcAddress(dll, "_f_Edit");轉型成
void __stdcall f_Edit(TListBox *List1) 這種型式
試試吧:
------------------------------------------------------------------------------------

hank0272
一般會員


發表:2
回覆:3
積分:1
註冊:2006-11-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-11-09 15:31:30 IP:203.73.xxx.xxx 訂閱
弄了幾天,終於知道coldwind1234大大所指的是什麼了,而且也順利完成了!感謝大家的觀注!
系統時間:2024-05-10 12:27:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!