2011-12-15 183 views
2

我想回撥,發送不同的對象類型和對象的一些額外的信息。所以我做了這個類:德爾福XE2 Datasnap回調

TCallBackObject = class 
    Sender : string; 
    ObjectClass : string; 
    Obj : TObject; 
    Status : integer; 
    ID : integer; 
    end; 

在我創建obj的領域不同的對象不同的情況,但我總是得到執行DSServer.BroadcastObject時出現錯誤信息「內部:無法實例對象......」

這是我非常簡單的例子:http://www.4shared.com/file/fONlAGM3/DataSnapExample.html

請看例子,告訴我什麼是錯的...

回答

2

在客戶端,對象類不是在可執行文件。 可以肯定的,試試這個骯髒的檢查。在涉及使用的類的客戶端代碼中創建一個引用。 例如。

TForm6 = class(TForm) 
    SQLConnection1: TSQLConnection; 
    DSClientCallbackChannelManager1: TDSClientCallbackChannelManager; 
    Button1: TButton; 
    Label1: TLabel; 
    Label2: TLabel; 
    procedure Button1Click(Sender: TObject); 
    procedure OnExecute(AValue: TObject); 
private 
    c: TCat; //dummy refernce to the class 
    d: TDog; //dummy refernce to the class 
    co: TCAllbackObject; //dummy refernce to the class 
public 
    { Public declarations } 
end; 

現在它應該工作。

一個更簡潔的方法是爲每個類使用一個空的寄存器類方法。如下所示:

TCallBackObject = class 
    Sender: string; 
    ObjectClass: string; 
    Obj: TObject; 
    Status: integer; 
    ID: integer; 
    class procedure Register; 
    end; 
    ... 
    class procedure TCallBackObject.Register; 
    begin 
    // 
    end; 

    initialization 

    TCallBackObject.Register; 

end. 
+0

Daniele,你是一個真正的:)謝謝很多! – 2011-12-15 11:08:01