AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Einem Array of WChar einen String zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

Einem Array of WChar einen String zuweisen

Ein Thema von s14 · begonnen am 9. Dez 2003 · letzter Beitrag vom 7. Mär 2004
Antwort Antwort
Seite 2 von 2     12   
Robert Marquardt
(Gast)

n/a Beiträge
 
#11

Re: Einem Array of WChar einen String zuweisen

  Alt 10. Dez 2003, 15:56
So ich habe mir mal die Datei aus dem Win XP DDK zur Brust genommen.
Ich hab jetzt keine Lust dem ganzen API nachzurennen. XcvData ist z. B. nicht darin deklariert.
Die obigen Konversionen sind soweit richtig bis auf die erwaehnten Fehler.
Extra Typen mit Delphi-like Namen hab ich auch nicht gemacht.

Delphi-Quellcode:
{*++

Copyright (c) 1997 - 1999  Hewlett-Packard Company.
Copyright (c) 1997 - 1999  Microsoft Corporation
All rights reserved

Module Name:

  tcpxcv.h

--*}


unit tcpxcv;

interface

uses
  Windows;

const
  RAWTCP = 1;
  PROTOCOL_RAWTCP_TYPE = RAWTCP;

  LPR = 2;
  PROTOCOL_LPR_TYPE = LPR;

  MAX_PORTNAME_LEN = 63 +1; // port name length
  MAX_NETWORKNAME_LEN = 48 +1; // host name length
  MAX_SNMP_COMMUNITY_STR_LEN = 32 +1; // SNMP Community String Name
  MAX_QUEUENAME_LEN = 32 +1; // lpr print que name
  MAX_IPADDR_STR_LEN = 15 +1; // ip address; string version
  MAX_ADDRESS_STR_LEN = 12 +1; // hw address length
  MAX_DEVICEDESCRIPTION_STR_LEN = 256+1;

type
  PPORT_DATA_1 = ^PORT_DATA_1;
  PORT_DATA_1 = packed record
    sztPortName: array [0..MAX_PORTNAME_LEN-1] of WideChar;
    dwVersion: DWORD;
    dwProtocol: DWORD;
    cbSize: DWORD;
    dwReserved: DWORD;
    sztHostAddress: array [0..MAX_NETWORKNAME_LEN-1] of WideChar;
    sztSNMPCommunity: array [0..MAX_SNMP_COMMUNITY_STR_LEN-1] of WideChar;
    dwDoubleSpool: DWORD;
    sztQueue: array [MAX_QUEUENAME_LEN-1] of WideChar;
    sztIPAddress: array [MAX_IPADDR_STR_LEN-1] of WideChar;
    Reserved: array [0..539] of Byte;
    dwPortNumber: DWORD;
    dwSNMPEnabled: DWORD;
    dwSNMPDevIndex: DWORD;
  end;

  PDELETE_PORT_DATA_1 = ^DELETE_PORT_DATA_1;
  DELETE_PORT_DATA_1 = packed record
    psztPortName: array [0..MAX_PORTNAME_LEN-1] of WideChar;
    Reserved: array [0..97] of Byte;
    dwVersion: DWORD;
    dwReserved: DWORD;
  end;

  PCONFIG_INFO_DATA_1 = ^CONFIG_INFO_DATA_1;
  CONFIG_INFO_DATA_1 = packed record
    Reserved[0..127] of Byte;
    dwVersion: DWORD;
  end;

implementation

end.
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#12

Re: Einem Array of WChar einen String zuweisen

  Alt 10. Dez 2003, 16:52
Vielen Dank an alle

Es funktioniert (fast) alles

@Robert Marquardt
In _PORT_DATA_1 muss die Länge mit
Reserved : Array[0..541] of Byte; angegeben werden, frag mich nicht warum, ist so
Vielleicht ein Fehler in der Dokumentation?

Ach ja zur Info der Aufruf der Funktion muss so aussehen:
Delphi-Quellcode:
XcvData(hXcv, // Handle des Monitors
        'AddPort', // Befehl an DLL, DeletePort auch möglich
        @PortData1, // PORT_DATA_1 Struktur
        SizeOf(PortData1)+2, // Größe des Puffers
        nil,
        0, // not used
        @OutputNeeded,
        @pdwStatus)
Also AddPort, nicht wie in der Doku L"AddPort".

Mein Problem ist jetz nur noch der Remote-Aufruf der Funktion OpenPrinter.
Das sollte laut MSDN so aussehen:
Delphi-Quellcode:
// Handle to a remote machine
if (OpenPrinter("<ServerName>\\,XcvMonitor <MonitorName>", &hXcv, &Defaults ) {
// hXcv contains an Xcv data handle to the monitor
// <MonitorName> on the server <ServerName>
}
Funktioniert aber nicht, vielleicht weiß da ja noch jemand was

Viele Grüße
s14
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#13

Re: Einem Array of WChar einen String zuweisen

  Alt 10. Dez 2003, 17:08
541 statt 539 ist wirklich ungewoehnlich.
Da hat sich seit dem Win 98 DDK nichts geaendert (wohl dem der sowas noch hat).
L"AddPort" ist ein Unicode-String-Literal (ein "Long"-Prefix). Die Umwandlung macht Delphi aber automatisch wenn der Parameter auf PWideChar lautet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#14

Re: Einem Array of WChar einen String zuweisen

  Alt 10. Dez 2003, 17:44
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke2.gif,

also dan so:
Code:
  XcvData(
[color=gray]*[/color]  HANDLE hXcv,
[color=gray]*[/color]  LPCWSTR pszDataName,
[color=gray]*[/color]  PBYTE  pInputData,
    DWORD  cbInputData,
[color=gray]*[/color]  PBYTE  pOutputData,
    DWORD  cbOutputData,
[color=gray]*[/color]  PDWORD pcbOutputNeeded,
[color=gray]*[/color]  PDWORD pdwStatus)

  XcvData(
[color=gray]*[/color]  hXcv,
[color=gray]*[/color]  @DataName,
[color=gray]*[/color]  @InputData,
    SizeOf(InputData),
[color=gray]*[/color]  @OutputData,
    SizeOf(OutputData),
[color=gray]*[/color]  @OutputNeeded,
[color=gray]*[/color]  @dwStatus)

[color=gray]*[/color] = Zeiger
z.B.:
Delphi-Quellcode:
Const MAX_DATANAME = XXX; {weiß nicht wie lang es sein muß}

Var DataName: Array[0..MAX_DATANAME - 1] of WideChar;

StringToWideChar('AddPort', @DataName, Min(Length('AddPort') + 1, MAX_DATANAME));

XcvData(
  hXcv,
  @DataName,
  @PortData1,
  SizeOf(PortData1),
  nil, 0, nil,
  @pdwStatus)

http://www.FrankNStein.de/Smiley-Kuss.gif http://www.FrankNStein.de/Smiley-Spinne.gif http://www.FrankNStein.de/Smiley-Winken.gif
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
RoyalString

Registriert seit: 3. Mai 2003
1 Beiträge
 
Delphi 6 Professional
 
#15

Re: Einem Array of WChar einen String zuweisen

  Alt 7. Mär 2004, 16:43
Hi,

leider habe ich bisher keinen Erfolg gehabt beim Erzeugen eines TCP Ports. Die Ausführung von XcvData scheint zunächst zu funktionieren, jedoch erhalte ich einen anschließend ein "Zugriff verweigert" und der Port wurde doch nicht angelegt. DIe Rechte die ich dem Defaults vergeben hatte waren SERVER_ACCESS_ADMINISTER. Also eigentlich sollte es doch genug sein. Das ganze passiert unter Win XP pro mit Admin Rechten.

Irgendeine Idee wo ich den Fehler machen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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