自行設計的DLL檔, 只能取得第一個參數 |
答題得分者是:jow
|
anumis
一般會員 發表:25 回覆:27 積分:15 註冊:2006-07-14 發送簡訊給我 |
這是DLL檔內的宣告
procedure DepartFile(SelectFile :PChar ;adoc :TADOConnection); begin //do something... end; exports DepartFile; 在主程式的引用 Procedure DepartFile(SelectFile :PChar ;adoc :TADOConnection); stdcall; External 'C:\mydll.dll' 結果只有第一個參數'SelectFile'有值,第二個一直是nil 請問有哪裡宣告錯嗎? 感謝回覆 :) |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
|
anumis
一般會員 發表:25 回覆:27 積分:15 註冊:2006-07-14 發送簡訊給我 |
TADOConnection是由呼叫端傳入,釋放也是在呼叫端 有試過改用PChar傳入Connectstring,接收後一樣為空值 後來又改成參數前後對調 "SelectFile" <-> "Connectstring" 結果Connectstring 成功傳入, SelectFile 變成空值 -_-||| 只有一個參數可以接收,第二個完全無用 ===================引 用 jow 文 章=================== 請問你是在呼叫端產生TADOConnection物件,還是在DLL中再產生? 使用後, 在何處將產生的TADOConnection物件釋放? 第二個參數會是不是nil, 應該是programmer可以控制的, 另外注意你DLL內涵數的calling convention. 個人意見僅供參考.
編輯記錄
anumis 重新編輯於 2007-10-04 09:36:57, 註解 無‧
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
我測試了一下, 執行正常.
[code delphi] library Test005dll; uses ShareMem, ADODB; procedure DepartFile(SelectFile: WideString; adoc: TADOConnection; var Result: WideString); stdcall; begin Result := SelectFile '- > adoc: '; if Assigned(adoc) then Result := Result '(' adoc.Name ') Assigned.' else Result := Result '(' 'NULL' ') NOT Assigned.' end; exports DepartFile; {$R *.res} begin end. [/code] [code delphi] unit fMain; interface uses Windows, Forms, ADODB, ActiveX, Controls, StdCtrls, Classes; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); public end; procedure DepartFile(SelectFile: WideString ; adoc: TADOConnection; var Result: WideString); stdcall; external 'Test005dll.dll' var Form1: TForm1; implementation uses SysUtils; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Result: WideString; adoc: TADOConnection; begin adoc := TADOConnection.Create(Self); try adoc.Name := 'ABCDE'; DepartFile('TEST.FILE', adoc, Result); Label1.Caption := Result; finally FreeAndNil(adoc); end; end; initialization CoInitialize(nil); finalization CoUninitialize(); end. [/code] |
anumis
一般會員 發表:25 回覆:27 積分:15 註冊:2006-07-14 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |