Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr? D2K9 (https://www.delphipraxis.net/132589-tat-und-form-var-param-fuzzt-aufeinmal-nicht-mehr-d2k9.html)

Alter Mann 15. Apr 2009 17:46


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

und Entschuldigung für den Titel, mir ist nichts besseres eingefallen.

Ich muss an IDirectorySearch.ExecuteSearch ein Array of PWideChar übergeben,
bisher habe ich das so erledigt:
Delphi-Quellcode:

function DirectorySearch(Properties : Array of PWideChar;
                         SearchText : String;
                         Category  : String;
                          out Items : TStringList) : Boolean;
...
  hr := search.ExecuteSearch(StringToOleStr('(objectCategory=' + Category + ')'), @Properties[0], dwCount, ptrResult);
...
end;
Unter Delphi 7 lief die Sache durch, s.a. hier (Posting #7).

Unter Delphi 2009, kommt es zur besagten Fehlermeldung: Die Typen der tatsächlichen und formalen Parameter müssen übereintimmen.

Gibt es noch ein anderen Vorgehensweise oder einen Compilerschalter der die Überprüfung (kurzzeitig) ausschaltet?

Danke

mjustin 15. Apr 2009 17:51

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

Zitat von Alter Mann
Unter Delphi 2009, kommt es zur besagten Fehlermeldung: Die Typen der tatsächlichen und formalen Parameter müssen übereintimmen

An welcher Stelle denn? Und welcher Parametertyp wird erwartet?

Etwas Fuzzy,

Alter Mann 15. Apr 2009 17:58

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

Kleine Frage, was muss ich übergeben? Ein Array of PWideChar und die Variable heißt dazu Properties;
Übergeben wird es so: @Properties[0].

Die aufzurufende Funktion ist so deklariert:
Delphi-Quellcode:
function ExecuteSearch(pszSearchFilter: PWideChar; pAttributeNames: PWideChar;
         dwNumberAttributes: LongWord; out phSearchResult: THandle): HResult; stdcall;
Alles klar :wink:

mkinzler 15. Apr 2009 18:07

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
 
Versuch mal
Delphi-Quellcode:
hr := search.ExecuteSearch(StringToOleStr('(objectCategory=' + Category + ')'), Properties[0], dwCount, ptrResult);

Alter Mann 15. Apr 2009 18:09

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

gute Idee, werde es morgen probieren.

Danke

oki 15. Apr 2009 21:49

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
 
Zur Not Caste es doch
Delphi-Quellcode:
  PWideChar(@Propeties[0])
Gruß oki

quendolineDD 15. Apr 2009 21:54

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
 
Ich kenne es aus Funktionen aus der Win32Api, das zum Beispiel bei NetQueryDisplayInformation als letzter Parameter ein Pointer zu einem Array of Record gegeben sein muss.
Dann übergebe ich einen Pointer (Buf := nil) und bekomme dort dann die Adresse reingeschrieben. Kleines Beispiel
Delphi-Quellcode:
var
  User       : PNET_DISPLAY_USER;

[...]

  Buf := nil;
  Status := NetQueryDisplayInformation(PWideChar(Domain), 1, 0, 100, MAX_PREFERRED_LENGTH, @Ret, Buf);

[...]

User := Buf;
Dann kann ich nun über die Dereferenzierung auf die Daten zugreifen und für das nächste Element im Array inkrementiere ich einfach den Pointer.
Bei Arrays als Var-Parameter ist das doch eh so eine Sache.

Alter Mann 16. Apr 2009 07:07

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

bisher geht es nicht, auch wenn die Tipps sich gut (lesen/anhören).

Lass ich das @-Zeichen weg, wird das Programm zwar compiliert, aber bei der Ausführung
kommt es dafür zu einer "Zugriffsverletzung im Module 'WLDAP32.DLL'".

Das Casting mit PWideChar(@Properties[0]) mag er nicht, da aus einer var-Variablen eine Konstante wird.

Und zu guter Letzt, da ich in 'Properties' Werte übergebe geht das mit der Pointer-Inkrementierung leider auch nicht.

Was bleibt, ist die Suche nach der Lösung.

Danke

mkinzler 16. Apr 2009 07:09

Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
 
Und wenn du aus dem Array einen #0 getrennten String machst ( c StringArray)?

oki 16. Apr 2009 07:25

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

Zitat von Alter Mann
Das Casting mit PWideChar(@Properties[0]) mag er nicht, da aus einer var-Variablen eine Konstante wird.

Moin,

leider kann ich aktuell nicht sehen warum der Compiler beim casten bezüglich der Zuweisung meckert. Das Properties ein Var ist hab ich so nicht entdeckt. Wie steht es damit eine lokale Variable vom Typ PWideChar zu definieren und den Inhalt von Propertys da hinein zu kopieren. Dann kanns du deine Variable problemlos übergeben.

Das mit dem var hab ich trotzdem noch nicht gerafft.

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.
Seite 1 von 3  1 23      

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