Entwickler-Ecke

Andere .NET-Sprachen - Probleme bei der Implementierung von Interfaces in Klassen


INeedHelp - Do 16.09.04 11:29
Titel: Probleme bei der Implementierung von Interfaces in Klassen
Hier der Quellcode in Auszügen, der im Original aus einem C#-Programm kommt.
Wenn Bedarf am C#-Quellcode besteht, kann dieser auch zugesendet werden.
Was ist hier falsch?

:?:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
unit csExample;

interface

uses Schulze.Notification,
     Schulze.Service,
     Schulze.StrokeRenderer,
     Schulze.Common,
     System.Collections,
     System.Data,
     System.Drawing,
     System.IO,
     System.Windows.Forms;


type PenInterface = interface (Schulze.Notification.IServiceApplication)
     ['{FD1DB8F0-FE2F-477C-9A97-24FD5608F91F}']
    function Notify(service:string; data:System.Object): System.Object;
    function get_Service: string;
      property Service: string read get_Service;
    function CreateDate(pStartSecond: Integer; pStartMillisecond: Integer):
                       DateTime; //virtual; static;
  end;
//  NotifyClass = class (TObject, PenInterface)
//  end;

implementation

{$AUTOBOX ON}
{$WARNINGS OFF}

function get_Service:string;
begin
  Result:='tutorial::csexample';
end;

function Notify(Service:string; data:System.Object):System.Object;
var
  wini:System.Windows.Forms.Form;
  f: Font;
  grf:Graphics;
  fileSchulze,path:string;
  bmp:Image;
  mDate:DateTime;
  ....
  ....

begin
  ret:=nil;
  fileSchulze:='';
  try
    ...
    request.Initialize(data);
    ...
    try
      ...
      milli:=0;
      seco:=0;
      while ... do
        begin
          ...
        end;

    except
      on System.Exception do
         ...;
    end;
    ...;
  except
    on System.Exception do
    ;
  end;
  Result:=ret;
end;


function CreateDate(pStartSecond:Integer;pStartMillisecond:Integer):DateTime;
var date:DateTime;
begin
  date:=DateTime.Create(1970,1,1);
  date:=date.AddSeconds(pStartSecond);
  date:=date.AddMilliseconds(pStartMillisecond);
  Result:=date;
end;

end.


Moderiert von user profile iconUdontknow: Delphi-Tags hinzugefügt.


Udontknow - Do 16.09.04 11:35

Hallo!

Zunächst einmal zwei Hinweise: Immer die Fehlermeldung(en) mitschreiben und die Delphi-Tags für Quellcode verwenden. :wink:

Ähm, irgendwie sehe ich hier keine Klasse. Nur Klassen können Interfaces implementieren, du hast da aber nur normale Funktionen und Prozeduren.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type TMeineKlasse=class(TObject,PenInterface)
  public
    function Notify(service:string; data:System.Object): System.Object;  
    function get_Service: string;  
      property Service: string read get_Service;  
    function CreateDate(pStartSecond: Integer; pStartMillisecond: Integer):  
                       DateTime; //virtual; static;  
  end;



Cu,
Udontknow


INeedHelp - Fr 17.09.04 12:23

Ich habe die Angaben entsprechend umgesetzt und in den Code eingebunden. Leider kommt der Compiler beim Compilieren des Packages nun mit folgender Meldung:

[Fehler] csExample.pas(27): Ungenügende Forward- oder External-Deklaration: 'NotifyClass.Notify'. :(


Udontknow - Fr 17.09.04 13:08

Gleich vorweg: Ich empfehle dir ganz dringend ein Tutorial in Sachen OOP in Delphi, fang nicht gleich mit Interfaces an, wenn du OOP nicht beherrscht.

Du hast die Methoden der Klasse deklariert, aber nicht implementiert. Im Implementation-Teil der Unit müssen die Implementationen der Methoden erfolgen. Im Endeffekt also einfach die vorherigen Funktionen mit dem Headervorsatz "TNotifyClass".



Delphi-Quelltext
1:
2:
3:
4:
5:
function TNotifyClass.Notify(Service:string; data:System.Object):System.Object;
begin
  //Hier der Code, der ausgeführt werden soll
  ...
end;


Cu,
Udontknow