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