Entwickler-Ecke
Sonstiges (Delphi) - Typbibilothek importieren...D7 und D2006??
winx - Fr 06.10.06 11:45
Titel: Typbibilothek importieren...D7 und D2006??
Hallo,
ich habe ein Problem nach dem Importieren einer Typbibiothek in D2006. Verschiedene Funktionen gehen irgendwie verloren. Ich
habe es getestet, indem ich in D7 und D2006, ein und diesselbe Typbibliothek importiert habe.
Diese sieht in D7 folgendermaßen aus
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: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307:
| unit Mark_TLB;
{$TYPEDADDRESS OFF} {$WARN SYMBOL_PLATFORM OFF} {$WRITEABLECONST ON} {$VARPROPSETTER ON} interface
uses Windows, ActiveX, Classes, Graphics, OleServer, StdVCL, Variants;
const MarkMajorVersion = 1; MarkMinorVersion = 0;
LIBID_Mark: TGUID = '{31B21198-0674-4E92-A530-30733A0FF68F}';
IID_IRemoteInterface: TGUID = '{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}'; DIID_IRemoteInterfaceEvents: TGUID = '{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}'; CLASS_RemoteInterface: TGUID = '{77CB394B-79AC-43A6-B492-4BA10126E3ED}'; type
IRemoteInterface = interface; IRemoteInterfaceDisp = dispinterface; IRemoteInterfaceEvents = dispinterface;
RemoteInterface = IRemoteInterface;
IRemoteInterface = interface(IDispatch) ['{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}'] function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; safecall; end;
IRemoteInterfaceDisp = dispinterface ['{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}'] function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; dispid 201; end;
IRemoteInterfaceEvents = dispinterface ['{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}'] procedure OnMessage(const MessageText: WideString); dispid 201; end;
CoRemoteInterface = class class function Create: IRemoteInterface; class function CreateRemote(const MachineName: string): IRemoteInterface; end;
TRemoteInterfaceOnMessage = procedure(ASender: TObject; const MessageText: WideString) of object;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} TRemoteInterfaceProperties= class; {$ENDIF} TRemoteInterface = class(TOleServer) private FOnMessage: TRemoteInterfaceOnMessage; FIntf: IRemoteInterface; {$IFDEF LIVE_SERVER_AT_DESIGN_TIME} FProps: TRemoteInterfaceProperties; function GetServerProperties: TRemoteInterfaceProperties; {$ENDIF} function GetDefaultInterface: IRemoteInterface; protected procedure InitServerData; override; procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Connect; override; procedure ConnectTo(svrIntf: IRemoteInterface); procedure Disconnect; override; function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; property DefaultInterface: IRemoteInterface read GetDefaultInterface; published {$IFDEF LIVE_SERVER_AT_DESIGN_TIME} property Server: TRemoteInterfaceProperties read GetServerProperties; {$ENDIF} property OnMessage: TRemoteInterfaceOnMessage read FOnMessage write FOnMessage; end;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} TRemoteInterfaceProperties = class(TPersistent) private FServer: TRemoteInterface; function GetDefaultInterface: IRemoteInterface; constructor Create(AServer: TRemoteInterface); protected public property DefaultInterface: IRemoteInterface read GetDefaultInterface; published end; {$ENDIF}
procedure Register;
resourcestring dtlServerPage = 'Additional';
dtlOcxPage = 'Additional';
implementation
uses ComObj;
class function CoRemoteInterface.Create: IRemoteInterface; begin Result := CreateComObject(CLASS_RemoteInterface) as IRemoteInterface; end;
class function CoRemoteInterface.CreateRemote(const MachineName: string): IRemoteInterface; begin Result := CreateRemoteComObject(MachineName, CLASS_RemoteInterface) as IRemoteInterface; end;
procedure TRemoteInterface.InitServerData; const CServerData: TServerData = ( ClassID: '{77CB394B-79AC-43A6-B492-4BA10126E3ED}'; IntfIID: '{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}'; EventIID: '{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}'; LicenseKey: nil; Version: 500); begin ServerData := @CServerData; end;
procedure TRemoteInterface.Connect; var punk: IUnknown; begin if FIntf = nil then begin punk := GetServer; ConnectEvents(punk); Fintf:= punk as IRemoteInterface; end; end;
procedure TRemoteInterface.ConnectTo(svrIntf: IRemoteInterface); begin Disconnect; FIntf := svrIntf; ConnectEvents(FIntf); end;
procedure TRemoteInterface.DisConnect; begin if Fintf <> nil then begin DisconnectEvents(FIntf); FIntf := nil; end; end;
function TRemoteInterface.GetDefaultInterface: IRemoteInterface; begin if FIntf = nil then Connect; Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); Result := FIntf; end;
constructor TRemoteInterface.Create(AOwner: TComponent); begin inherited Create(AOwner); {$IFDEF LIVE_SERVER_AT_DESIGN_TIME} FProps := TRemoteInterfaceProperties.Create(Self); {$ENDIF} end;
destructor TRemoteInterface.Destroy; begin {$IFDEF LIVE_SERVER_AT_DESIGN_TIME} FProps.Free; {$ENDIF} inherited Destroy; end;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} function TRemoteInterface.GetServerProperties: TRemoteInterfaceProperties; begin Result := FProps; end; {$ENDIF}
procedure TRemoteInterface.InvokeEvent(DispID: TDispID; var Params: TVariantArray); begin case DispID of -1: Exit; 201: if Assigned(FOnMessage) then FOnMessage(Self, Params[0] ); end; end;
function TRemoteInterface.DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; begin Result := DefaultInterface.DoCommand(Cmd, Params, Data); end;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} constructor TRemoteInterfaceProperties.Create(AServer: TRemoteInterface); begin inherited Create; FServer := AServer; end;
function TRemoteInterfaceProperties.GetDefaultInterface: IRemoteInterface; begin Result := FServer.DefaultInterface; end;
{$ENDIF}
procedure Register; begin RegisterComponents(dtlServerPage, [TRemoteInterface]); end;
end. |
In Delphi 2006, sieht sie dagegen nur so aus:
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: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125:
| unit Mark_TLB;
{$TYPEDADDRESS OFF} {$WARN SYMBOL_PLATFORM OFF} {$WRITEABLECONST ON} {$VARPROPSETTER ON} interface
uses Windows, ActiveX, Classes, Graphics, OleServer, StdVCL, Variants;
const MarkMajorVersion = 1; MarkMinorVersion = 0;
LIBID_Mark: TGUID = '{31B21198-0674-4E92-A530-30733A0FF68F}';
IID_IRemoteInterface: TGUID = '{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}'; DIID_IRemoteInterfaceEvents: TGUID = '{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}'; CLASS_RemoteInterface: TGUID = '{77CB394B-79AC-43A6-B492-4BA10126E3ED}'; type
IRemoteInterface = interface; IRemoteInterfaceDisp = dispinterface; IRemoteInterfaceEvents = dispinterface;
RemoteInterface = IRemoteInterface;
IRemoteInterface = interface(IDispatch) ['{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}'] function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; safecall; end;
IRemoteInterfaceDisp = dispinterface ['{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}'] function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; dispid 201; end;
IRemoteInterfaceEvents = dispinterface ['{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}'] procedure OnMessage(const MessageText: WideString); dispid 201; end;
CoRemoteInterface = class class function Create: IRemoteInterface; class function CreateRemote(const MachineName: string): IRemoteInterface; end;
implementation
uses ComObj;
class function CoRemoteInterface.Create: IRemoteInterface; begin Result := CreateComObject(CLASS_RemoteInterface) as IRemoteInterface; end;
class function CoRemoteInterface.CreateRemote(const MachineName: string): IRemoteInterface; begin Result := CreateRemoteComObject(MachineName, CLASS_RemoteInterface) as IRemoteInterface; end;
end. |
Ich benötige die TRemoteInterface.Connect Funktion, die jetzt allerdings nicht mehr vorhanden ist...kann ich diese
irgendwie ersetzen, oder wo liegt mein Fehler???
Danke für alle hilfreichen Tipps!!!
gruß,
winx
p.s: das problem ist auch
hier [
http://www.delphipraxis.net/post621791.html#621791] gepostet
jaenicke - Fr 06.10.06 12:27
Also normalerweise sollte die importierte Bibliothek von D7 doch auch für D2006 gehen. Du darfst nur keine Aktualisierung machen. Sonst überschreibt D2006 ja die Unit.
Was ich als Grund vermute:
D7 schreibt ja als Hinweis hin dass da Eigenschaften dabei sind die im OI nicht angezeigt werden sollten. Wegen möglicher Fehler. Ich vermute dass D2006 solche Klassen einfach vollkommen weglässt. Ich nehme allerdings an dass man das in D2006 irgendwie auch umschalten kann...
winx - Fr 06.10.06 12:37
Danke...
Kann ich solch eine Typbibilothek, dann auch direkt als Komponente in D2006 aufs Formual ziehen und im OI bearbeiten???
Wie geht das in D2006.Net und D2006 Win32???
Aber wo man das einschalten kann, weisst du auch nich, oder?
jaenicke - Fr 06.10.06 13:00
Na ja du musst halt dafür ein Package erstellen. In D2006 .NET musst du außerdem evtl. ein paar Änderungen vornehmen z.B. wegen der benutzten Units. Das sieht ja bei .NET normalerweise etwas anders aus von wegen System.xyz und so. Allerdings werden diese Standard-Units normalerweise auch so gefunden. Viel hab ich mit .NET aber noch nicht gemacht deshalb weiß ich nicht so genau wie das genau ist und obs da noch andere Probleme gibt. (Bei mir ging es einfach so.)
Jedenfalls egal ob .NET oder Win32:
Neues Package erstellen (eben .NET oder Win32) und dann die TLB-Unit hinzufügen. Kompilieren... Installieren... Fertig...
(Hoffentlich :wink: )
Tja wie man das einschalten kann keine Ahnung. Was ist das denn überhaupt für eine TLB? Ich meine wenn die frei verfügbar ist könnte ichs ja selber mal testen...
winx - Di 10.10.06 08:12
Na das werd ich doch gleich mal probieren und meine Erfahrungen hier posten...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!