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

To Paradise: Delphi 2005 的三個問題反映

 
darkside
一般會員


發表:15
回覆:42
積分:16
註冊:2002-03-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-05 12:02:38 IP:220.135.xxx.xxx 未訂閱
To Paradise & all Delphi fan: 小弟這兩天用 Delphi 2005 把以前開發的 Delphi 5 元件 package 升級 成 VCL.NET 的 assembly,升級中間當然有些 language 的小問題,這些 查 help 就能解決,但有三個問題我覺得應該提出來給 Borland 及其他 Delphi 同好知道: 第一:.dcpil 檔案 Delphi 2005 建立的 assembly 竟然必須要附帶 .dcpil 檔案,才能讓 其他 assembly 專案引用,可是 Delphi 8 建立的 asembly 不用耶。而且 以 .NET assembly 的規格來說,應該也是只需要 assembly 的 .DLL 檔 就夠了,何以 Delphi 2005 這麼特別?這會增加開發人員在部署上的麻煩。 只是猜想:是不是因為 D8 有 .NET 1.1 SP1 相容性的問題,使得 Borland RD 決定用自己的 symbol file? 不管怎樣,還是希望解除這個限制。 第二:DesignIntf 和 DesignEditor 到哪裡去了? 元件開發者必定很熟這兩個檔案了,我在 Borland 附的 source 目錄底下 有找到這兩個檔案,可是 uses 這兩個單元會無法編譯通過,我該把哪個 assembly DLL 檔加入專案的 references 清單? 我試過手動加入 Borland.Studio.Vcl.Design.dll,並沒有用,編譯錯誤: [Fatal Error] MyVclReg.pas(23): F1026 File not found: 'DesignIntf.dcuil' 我該如何解決這個問題? 第三:bug 當我升級完一個視覺化元件的 package 時,寫了個 VCL.NET form 程式來 測試,發現元件會丟出錯誤訊息: "並未將物件參考設定為物件的執行個體" 英文訊息我查過了,是: System.NullReferenceException: Object reference not set to an instance of an object. 這個錯誤應該跟 null pointer exception 的意思一樣,可是我反覆的追蹤 之後,發現問題竟然出在這裡: procedure WMKillFocus(var Msg: TMessage); message WM_KILLFOCUS; 上面的宣告必須改成: procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS; 這樣就行了。有點詭異,不是嗎?我有好幾視覺化元件都會這樣,一一修改後 就不會出現前面的錯誤訊息了,因此我想應該是 VCL.NET 的 bug。 這個問題應該很容易 reproduce。 發表人 - darkside 於 2004/12/05 12:03:42
darkside
一般會員


發表:15
回覆:42
積分:16
註冊:2002-03-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-06 00:19:34 IP:220.135.xxx.xxx 未訂閱
引言: 第二:DesignIntf 和 DesignEditor 到哪裡去了?
這個問題在 Borland newsgroup 有為仁兄給我提示之後,已經解決了。 專案的 Requires 清單必須加入 Borland.Studio.Vcl.Design.dll, 然後在 MyReg.pas 中的 uses 子句: uses Borland.Vcl.Design.DesignIntf, Borland.Vcl.Design.DesignEditors; 不能直接寫 DesignIntf,之前一直沒想到要寫全名。 供大家參考。
Gordon Li
一般會員


發表:1
回覆:25
積分:20
註冊:2004-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-17 10:48:34 IP:203.67.xxx.xxx 未訂閱
>第一:.dcpil 檔案 Delphi 2005 建立的 assembly 竟然必須要附帶 .dcpil 檔案,才能讓 其他 assembly 專案引用,可是 Delphi 8 建立的 asembly 不用耶。而且 以 .NET assembly 的規格來說,應該也是只需要 assembly 的 .DLL 檔 就夠了,何以 Delphi 2005 這麼特別?這會增加開發人員在部署上的麻煩。 只是猜想:是不是因為 D8 有 .NET 1.1 SP1 相容性的問題,使得 Borland RD 決定用自己的 symbol file? 不管怎樣,還是希望解除這個限制。 No, 沒有這個問題, 我用Delphi 2005建立一個Assembly, 只需要.dll就可以讓VS.NET 2003的C# Project和Delphi 2005的Delphi.NETProject使用,完全沒問題. 下面是簡易的step: 1. 在Delphi 2005中建立一個Delphi.NET Package Project. 2. 建立一個class file : unit uTestClass; interface type TClass1 = class private { Private Declarations } public constructor Create; function GetVersion : String; end; implementation constructor TClass1.Create; begin inherited Create; // TODO: Add any constructor code here end; function TClass1.GetVersion: String; begin Result := Environment.Version.ToString; end; end. 3. compile這個Package成為一個Assembly. 4.在VS.NET或是Delphi 2005中建立一個WinForms Project, 5.在reference中加入Step 3的Assembly. 6. 在WinForms表單中import Class File的namespace, 例如我的例子是 : using uTestClass; uses uTestClass; 7. 撰寫下面的程式碼 private void button1_Click(object sender, System.EventArgs e) { TClass1 aClass; aClass = new TClass1(); this.textBox1.Text = aClass.GetVersion(); } procedure TWinForm4.Button1_Click(sender: System.Object; e: System.EventArgs); var aClass : TClass1; begin aClass := TClass1.Create; Self.TextBox1.Text := aClass.GetVersion; end; 8. 為了確認不需要dcpil檔, 在執行前delete dcpil檔 9. C#/Delphi.NET WinForms程式正確執行 10. Game Over.
darkside
一般會員


發表:15
回覆:42
積分:16
註冊:2002-03-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-20 09:54:39 IP:220.135.xxx.xxx 未訂閱
引言: >第一:.dcpil 檔案 No, 沒有這個問題, 我用Delphi 2005建立一個Assembly, 只需要.dll就可以讓VS.NET 2003的C# Project和Delphi 2005的Delphi.NETProject使用,完全沒問題. 下面是簡易的step:
Dear Lee sir: Are you sure? 您確定您的 .dcpil 檔案沒有在 search path 裡面? 或者是您寫的測試範例太單純,以致於不會產生這個問題? 因為我再試了一次,還是一樣,如果沒有 .dcpil 檔,其他 D2005 專案 就無法編譯,因為找不到組件的 .dcpil 檔。 Borland 論壇也有人發現這個問題, TeamB 成員也 confirm 過了,這 確實是 D2005 的問題。參考: http://groups.google.com.tw/groups?hl=zh-TW&lr=&threadm=41dc4364%40newsgroups.borland.com&rnum=3&prev=/groups%3Fq%3Dassembly%2Bdcuil%26hl%3Dzh-TW%26lr%3D%26group%3Dborland.public.delphi.language.delphi.dotnet%26scoring%3Dd 剪貼 TeamB 成員的回答: ----------------------- > Can anybody explain why do I need to specify path to the .dcuil > files when I try to link .NET assembly that was created in Delphi > 2005 into Delphi 2005 project? The Delphi language includes certain constructs that are not part of the FCL. As a result, Delphi does not support round-tripping of Delphi-generated assemblies - if you want to use Delphi assemblies, you either need the .dc?il files or the source code. -- Yorai Aminov (TeamB) (TeamB cannot answer questions received via email.) Shorter Path - http://www.shorterpath.com Yorai's Page - http://www.yoraispage.com ------------------------------------------------- Delphi is a superset of the CLI, and the extra information must be stored somewhere. That is why Delphi requires .dcpil files, to get at the extra information required to use Delphi-specific types, which simply can't be used like that in other languages. Rudy Velthuis [TeamB] http://rvelthuis.bei.t-online.de 發表人 - darkside 於 2005/03/20 10:01:50
allan1314
一般會員


發表:3
回覆:3
積分:1
註冊:2004-10-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-29 17:45:01 IP:211.20.xxx.xxx 未訂閱
很抱歉,我是初學者,想知道一下第二個問題,是要從何下手,怎麼去找到需要修改的地方。
boblin
一般會員


發表:0
回覆:7
積分:1
註冊:2004-07-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-20 15:05:11 IP:203.102.xxx.xxx 未訂閱
我本打算也???一下第一???,不?在?其?,我??另一?我不解的??: 我的VCL.NET Package中有4?Controls, 如果我把它?到VCL.NET 的 Control Panel 中,可以看到全部4?Controls, 但是如果加到WinForm 的 Control Panel中,?只能?到其中的三?,企?加到VS.NET中也一?只能?到三?。不能?到的??是派生自TLabel,而能?到的其中一?是派生自TComponent,照理?TLabel也是?自TComponent,?理由?看不?的! ?其中又有什么?妙呢?
系統時間:2024-05-13 11:27:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!