AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr? D2K9
Thema durchsuchen
Ansicht
Themen-Optionen

tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr? D2K9

Ein Thema von Alter Mann · begonnen am 15. Apr 2009 · letzter Beitrag vom 16. Apr 2009
Antwort Antwort
Seite 2 von 3     12 3      
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#11

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 08:34
Mal ne doofe Frage, wo und wie definierst du ptrResult?
42
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 08:45
@oki

siehe Link im ersten Beitrag.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#13

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 08:49
Zitat von Alter Mann:
@oki

siehe Link im ersten Beitrag.
Ah klar, hatte ich übersehen.
Wie steht es mit der lokalen Variable PWideChar?

Vielleicht so?
Delphi-Quellcode:
...
var PProps : PWideChar;
...
  PProps := PWideChar(@Properties[0]);
  hr := search.ExecuteSearch(StringToOleStr('(objectCategory=' + Category + ')'), PProps, dwCount, ptrResult);
42
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 09:12
Hi oki

Ich kann nicht erkennen worauf du hinaus willst.

Wie schon geschrieben, das Problem taucht erstmalig mit Delphi 2009 auf,
alle anderen Versionen(D5, D7, D2005, D2007) compilieren den Code 1a.

Oh, dazwischen gefunkt.

Habe es probiert; Ergebnis: "Zugriffsverletzung im Modul 'msvcrt.sll'".

Es scheint ein reines Delphi 2009 - Problem zu sein.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#15

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 09:15
Jo, dann bin ich am Ende. Kann das auch nicht überprüfen, da D2007. Macht mir aber etwas sorgen das Problem. Hab solche Konstrukte nie als Problem gesehen und relativ oft verwendet. Sollte mich dann erst mal mit D2009 zurückhalten

Gruß oki
42
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 12:44
Mir ist da noch etwas aufgefallen.

Beim setzen der SearchPreference werden zu Abfangen eines Fehlers statische 'Array of WideChar' verwendet
Delphi-Quellcode:
var
...
  szErr : array[0..255] of WideChar;
  szName : array[0..255] of WideChar;
  idx : Integer;
  found : Boolean;
begin
  if SUCCEEDED(ADsGetObject(edtADsPath.Text, IDirectorySearch, Search)) then
  begin
    try
      opt.dwSearchPref := ADS_SEARCHPREF_SEARCH_SCOPE;
      opt.vValue.dwType := ADSTYPE_INTEGER;
      opt.vValue.__MIDL_0010.Integer := ADS_SCOPE_SUBTREE;
      if not SUCCEEDED(search.SetSearchPreference(opt, 1)) then
      begin
        ADsGetLastError(dwErr, @szErr[0], 254, @szName[0], 254); // <- hier klappt es
        ShowMessage(WideCharToString(szErr));
        Result := False;
        Exit;
      end;
...
liegt es hier
hr := search.ExecuteSearch(StringToOleStr('(objectCategory=' + Category + ')'), @Properties[0], dwCount, ptrResult); nun daran, das ein dynamisches Array ist, oder aber ein PWideChar?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 13:03
.. ist es nicht so,
dass bei einem statischen Array @Array[0] die Adresse des
ersten Elementes liefert.

Ein dynamisches Array wird aber schon durch seine Adresse
repräsentiert.

Sollte es dann nicht reichen, es so zu übergeben?
hr := search.ExecuteSearch(StringToOleStr('(objectCategory=' + Category + ')'), Properties, dwCount, ptrResult); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#18

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 13:15
Nun ja,

mir ist nicht alles klar was du gepostet hast. Das liegt aber wohl eher daran, dass ich mit diesem Konstrukt noch nicht gearbeitet habe.

Grundsätzlich bin ich aber der Meinung, dass du einen Zeiger auf WideChars übergeben musst. Imho gestaltet sich das bei dynamischen Arrays so:
  Propertes[0] Bei statischen so:
  @Propertys[0] Ich glaube mich duster daran erinnern zu können, dass dynamische Arrays Zeiger beinhalten. Irgentwie bin ich mir jetzt aber auch nicht mehr sicher.

Ein Array of WideChar sollte aber wie in deinem Fall nur 256 WideChar-Zeichen enthalten. Somit zeigt imho Properties[1] nicht auf den zweiten Namen, sondern auf das zweite Zeichen.

Das sollte aber alles in Bezug auf den Aufruf egal sein. Entscheidend ist, dass ein Zeiger auf WideChars übergeben wird. Das sollte in deinem Fall mit @Properties[0] korrekt sein.

Wieviele Namen übergibst du denn? Vielleicht fehlt die #0 hinter jedem Namen wenn es mehrere sind oder die Länge stimmt nicht? Ich denke mal, es klappt bei ADsGetLastError, weil szName lokal als Variable definiert ist und die Funktion szName füllt.
Ist denn der Rückgabewert von szName dein Properties?

Was steht denn in Properties drin? Vielleicht kämpfst du ja auch mit zwei Problemen,
1. Richtige Übergabe des Parameters,
2. fehlerhafter Eintrag im Parameter.

Was steht bei dir in dwNumberAttributes für ein Wert? Passt der zur Anzahl der Atribute? Nicht dass hier versehentlich die Anzahl der Zeichen übergeben wird?

Gruß oki
42
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#19

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 13:21
Hi @oki

Wenn ich dieses Problem hätte, wäre es keins.

Der Compiler bleibt an der Stelle @Properties[0] stehen und mault rum:
'Die tatsächlichen und formalen Parameter stimmen nicht überein'.

Das mit den 'Array[0..255] of WideChar' war nur ein Gedankengang, da diese Stelle klaglos
durchgeht.

OK?
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#20

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?

  Alt 16. Apr 2009, 13:34
Ja klar,

der Punkt ist aber, dass Delphi 2009 nicht damit klar kommt, dass ein PWideChar erwartet wird und du den @-Operator verwendest. Somit sehe ich das so, dass du hier wohl zwingend den Typ benutzen musst der angegeben ist. Warum das bei deinem letzten Beispiel klappt ignoriere ich jetzt mal geflissentlich .

Ich sehe da auf dieses Problem bezogen zwei Wege.
1. Ein Type-Caste
2. Verwendung einer lokalen Variable

Der Type-Caste scheint ja nicht zu funzen. Die Verwendung einer lokalen Variable führt zu einer Exception. Damit kommt aber der Compiler klar. Also muss was mit dem Inhalt nicht stimmen. Entweder das einfache Casten auf PWideChar liefert Müll oder der Inhalt ist von Vornherein Müll (oder die Anzahl der Elemente passt nicht oder ...).

Deshalb meine Frage, was in Properties denn drin steht.

Leg doch mal eine lokale Variable wie in deinem letzten Beispiel an und kopiere die Properties dort rein.
Delphi-Quellcode:
var szPropertys : Array [0..255] of WideChar;

...
  szProperties := Properties;
  hr := search.ExecuteSearch(StringToOleStr('(objectCategory=' + Category + ')'), @szProperties[0], dwCount, ptrResult);
Wie gesagt, da mein Beispiel mit PWideChar als lokale Variable vom Compiler geschluckt wurde kann die nachfolgende Exzeption auch daran liegen, dass der Inhalt von Properties danach nicht wirklich übergeben wurde.

Was ist eigentlich, wenn du deinen Funktionskopf so veränderst, dass Properties als var-Parameter oder gleich als PWideChar übergeben wird?

Gruß Oki
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 21:18 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