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

DLL中Library跟unit間如何傳遞物件

尚未結案
Komuro
一般會員


發表:27
回覆:46
積分:14
註冊:2004-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-09 09:48:59 IP:61.66.xxx.xxx 未訂閱
在下初寫DLL程式,內容如下: library TransDLL; uses SysUtils,Classes, PortsM in 'PortsM.pas'; var Table1:TADOTable; exports InitTable,Giveidelport; {$R *.res} begin Table1 := TADOTable.Create(nil); Table1.Connection := ADOConnection1; end. 請問我如何能將Table1傳給PortsM來用?請各位高手指教,謝
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-09 11:00:53 IP:61.218.xxx.xxx 未訂閱
是可以 , 但會弄得很複雜 , 且你更不知道什麼時候該去 FreeLibrary ! 因此建議你在 DLL 的回傳值最好是 ShortString , Integer 之類的型態 會比較合適
jumo
一般會員


發表:33
回覆:65
積分:24
註冊:2002-04-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-09 11:58:30 IP:203.204.xxx.xxx 未訂閱
你試試看下面的方式吧 function AdoTest : _Recordset; stdcall; var ADS1 : TADODataSet; begin ADS1 := TADODataSet.Create(nil); ads1.ConnectionString := '......'; // 請填入 ConnectionString ads1.CommandText := '......'; // 請填入 CommandText ads1.Open; Result := ads1.Recordset; end;
Komuro
一般會員


發表:27
回覆:46
積分:14
註冊:2004-02-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-09 12:32:09 IP:61.66.xxx.xxx 未訂閱
jumo你好,PortsM是TransDLL內的一個unit不是要export的函數,就像project下面new一個unit然後project下create物件後,在unit中引用,對於你的回覆不太了解??
jumo
一般會員


發表:33
回覆:65
積分:24
註冊:2002-04-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-11 12:34:28 IP:61.218.xxx.xxx 未訂閱
抱歉, 沒看清楚你的問題就回覆了..... 不過你要傳資料給其他的
sos_admin
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-11 17:22:09 IP:61.155.xxx.xxx 未訂閱
var Table1:TADOTable; 上面这个放在PortsM.pas中公开的部分,不久可以了; 风花雪月
Komuro
一般會員


發表:27
回覆:46
積分:14
註冊:2004-02-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-13 10:37:57 IP:61.66.xxx.xxx 未訂閱
版主你好,我將程式改成 unit PortM; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdComponent, IdTCPServer, IdBaseComponent, IdThreadMgr, IdThreadMgrDefault, DB, ADODB, StdCtrls,ComCtrls; type TForm1 = class(TForm) IdThreadMgrDefault1: TIdThreadMgrDefault; TCPServer: TIdTCPServer; procedure TCPServerExecute(AThread: TIdPeerThread); private FConnectionCount: Integer; { Private declarations } public { Public declarations } end; var Table1: TADOTable; <====放這裡執行時會有錯誤? ADOConnection1: TADOConnection; 不知是否有簡單的範例?
sos_admin
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-13 13:32:15 IP:61.155.xxx.xxx 未訂閱
在线程或DLL中用ADO,要uses ActiveX; 并且调用CoInitialize函数; 如下:
library dllform;
uses
  SysUtils,Classes,Forms,windows,ActiveX,
  Unit1 in 'Unit1.pas' {Form1};    {$R *.res}
...
begin
  CoInitialize(nil);
end.
风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-13 17:16:57 IP:210.243.xxx.xxx 未訂閱
我也不主張把物件傳到別的unit去用..... 就如James所說free會成一個問題(我個人認為啦) 式許delphi 8 之後free不會有問題,但我還是不 認為這是好的用法,個什認為你可把吧table丟進來 從呼叫那支dll的程式丟進來,當然也由它來free, 或你只是丟一個sql指令,到那都ok囉.... 如果你一定要用adotable的話....那一樣丟對應的 參數就可以了,不一定要傳一個table吧... 以上供你參考,或者是我誤會你的問題了,那麼請你 再說明一下吧
Komuro
一般會員


發表:27
回覆:46
積分:14
註冊:2004-02-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-04-14 23:16:19 IP:61.59.xxx.xxx 未訂閱
在下發現2篇,大家參考一下 http://delphi.ktop.com.tw/topic.php?topic_id=25614 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22386(主程式傳ADO給DLL) 好像還是不能DLL內互傳....
系統時間:2024-05-17 18:46:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!