Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi UPnP CreateAsyncFind > COM-Interface Frage (https://www.delphipraxis.net/91323-upnp-createasyncfind-com-interface-frage.html)

richard_boderich 3. Mai 2007 12:05


UPnP CreateAsyncFind > COM-Interface Frage
 
Hallo Leute!

ich brauch mal eure hilfe bei einer Frage zum COM-Interface bei meiner UPnP funktion.
hier erstmal der code.

Code:

type
  IUPnPDeviceFinderCallback = interface(IUnknown)['{415A984A-88B3-49F3-92AF-0508BEDF0D6C}']
    procedure DeviceAdded(iFindData: Integer; UPnPDevice: UPnPDevice); stdcall;
    procedure DeviceRemoved(iFindData: Integer; wsUDN: WideString); stdcall;
    procedure SearchComplete(iFindData: Integer); stdcall;
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

function getglobalip:string;
var
  UPnPDeviceFinder : IUPnPDeviceFinder;
  UPnpDevices : IUPnpDevices;
  UPnpDevice : IUPnpDevice;
  UPnpService : IUPnpService;
  myobject:integer;

begin

  UPnPDeviceFinder := CoUPnPDeviceFinder.Create;
  UPnPDeviceFinder.CreateAsyncFind('75802409-bccb-40e7-8e6c-fa095ecce13g-00040E8D4CCB',0, ?? Was muss hier rein ??  ,myobject);
  UPnPDeviceFinder.StartAsyncFind(myobject);


end;

mein problem ist das ich nicht weis, was ich in dem Createasyncfind aufruf an der markierten stelle einfügen soll. die interfacedeklaration habe ich im netz gefunden. jedoch weis ich auch nicht was genau diese lange zahlenreihe in der interfacedeklaration bedeutet. ich vermute mal das es die zuordnung zu einem bestimmten COM-interfacetyp ist, jedoch weis ich es nicht genau. waere schoen ,wenn mir da jemand weiterhelfen koennte.

gruss richard

RobertP 3. Mai 2007 13:34

Re: UPnP CreateAsyncFind > COM-Interface Frage
 
Erst den Gerätetyp, dann 0 und dann das Callback Interface.
Delphi-Quellcode:
UPnPDeviceFinder.CreateAsyncFind('urn:schemas-upnp-org:device:InternetGatewayDevice:1', 0, upnpdfc);

richard_boderich 3. Mai 2007 13:45

Re: UPnP CreateAsyncFind > COM-Interface Frage
 
ähm ja ok, aber ich suche doch nicht by type. und laut msdn verlangt die funktion den UID des upnp devices????

richard

RobertP 3. Mai 2007 14:04

Re: UPnP CreateAsyncFind > COM-Interface Frage
 
Achso, geht aber genauso:
Delphi-Quellcode:
UPnPDeviceFinder.CreateAsyncFind('uuid:75802409-bccb-40e7-8e6c-fa095ecce13g-00040E8D4CCB', 0, upnpdfc);

JonnyGuitar 3. Mai 2007 14:12

Re: UPnP CreateAsyncFind > COM-Interface Frage
 
so wie mrpayne es schreibt ist es schon richtig ;)

richard_boderich 3. Mai 2007 14:12

Re: UPnP CreateAsyncFind > COM-Interface Frage
 
ich hab es jetzt so gemacht wie in deine ersten post, bekomme jedoch beim aufruf der funktion die meldung "ungueltiger zeiger". ich habe das gefuehl , das ich beim interface was falsch mach oder einen cast vergessen habe. im msdn ist es auch ein pointer auf das callback interface das verwendet wird. aber wenn ich es als pointer verwende gibts auch wieder "inkompatible typen". ich finde die funktion sehr schlecht dokumentiert.

richard

RobertP 3. Mai 2007 14:18

Re: UPnP CreateAsyncFind > COM-Interface Frage
 
Bei mir hats auch erst funktioniert nachdem ich eine Klasse erstellt habe:
Delphi-Quellcode:
type
  IUPnPDeviceFinderCallback = interface(IUnknown)['{415A984A-88B3-49F3-92AF-0508BEDF0D6C}']
    procedure DeviceAdded(iFindData: Integer; UPnPDevice: UPnPDevice); stdcall;
    procedure DeviceRemoved(iFindData: Integer; wsUDN: WideString); stdcall;
    procedure SearchComplete(iFindData: Integer); stdcall;
  end;

type
  TUPnPDeviceFinderCallback = class(TInterfacedObject, IUPnPDeviceFinderCallback)
  protected
    procedure DeviceAdded(iFindData: Integer; UPnPDevice: UPnPDevice); stdcall;
    procedure DeviceRemoved(iFindData: Integer; wsUDN: WideString); stdcall;
    procedure SearchComplete(iFindData: Integer); stdcall;
  public
    constructor Create;
  end;

richard_boderich 4. Mai 2007 07:50

Re: UPnP CreateAsyncFind > COM-Interface Frage
 
wenn ich das so implementiere bekomme ich die meldung vom compiler

[Fehler] Unit1.pas(32): Ungenügende Forward- oder External-Deklaration: 'TUPnPDeviceFinderCallback.DeviceAdded'
[Fehler] Unit1.pas(33): Ungenügende Forward- oder External-Deklaration: 'TUPnPDeviceFinderCallback.DeviceRemoved'
[Fehler] Unit1.pas(34): Ungenügende Forward- oder External-Deklaration: 'TUPnPDeviceFinderCallback.SearchComplete'
[Fehler] Unit1.pas(36): Ungenügende Forward- oder External-Deklaration: 'TUPnPDeviceFinderCallback.Create'

keine ahnung was ich falsch mache. die schreibweise hab ich ueberprueft und die ist ok.

gruß richard

RobertP 4. Mai 2007 14:16

Re: UPnP CreateAsyncFind > COM-Interface Frage
 
Hast du die entsprechenden Prozeduren der Klasse deklariert?

Delphi-Quellcode:
constructor TUPnPDeviceFinderCallback.Create;
begin
  inherited Create;
end;

procedure TUPnPDeviceFinderCallback.DeviceAdded(iFindData: Integer; UPnPDevice: UPnPDevice); stdcall;
begin
  // Code
end;

procedure TUPnPDeviceFinderCallback.DeviceRemoved(iFindData: Integer; wsUDN: WideString); stdcall;
begin
end;

procedure TUPnPDeviceFinderCallback.SearchComplete(iFindData: Integer); stdcall;
begin
  // Code
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz