![]() |
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:
Unter Delphi 7 lief die Sache durch, s.a. 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 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 |
Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
Zitat:
Etwas Fuzzy, |
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:
Alles klar :wink:
function ExecuteSearch(pszSearchFilter: PWideChar; pAttributeNames: PWideChar;
dwNumberAttributes: LongWord; out phSearchResult: THandle): HResult; stdcall; |
Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
Versuch mal
Delphi-Quellcode:
hr := search.ExecuteSearch(StringToOleStr('(objectCategory=' + Category + ')'), Properties[0], dwCount, ptrResult);
|
Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
Hi
gute Idee, werde es morgen probieren. Danke |
Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
Zur Not Caste es doch
Delphi-Quellcode:
Gruß oki
PWideChar(@Propeties[0])
|
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:
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.
var
User : PNET_DISPLAY_USER; [...] Buf := nil; Status := NetQueryDisplayInformation(PWideChar(Domain), 1, 0, 100, MAX_PREFERRED_LENGTH, @Ret, Buf); [...] User := Buf; Bei Arrays als Var-Parameter ist das doch eh so eine Sache. |
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 |
Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
Und wenn du aus dem Array einen #0 getrennten String machst ( c StringArray)?
|
Re: tat. und form. Var-Param. - fuzzt aufeinmal nicht mehr?
Zitat:
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:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz