Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Vista Kontakt schreiben (https://www.delphipraxis.net/139595-vista-kontakt-schreiben.html)

dingsbums 1. Sep 2009 09:37


Vista Kontakt schreiben
 
Hallo zusammen,

ich versuche gerade unter Delphi7 ein Programm zu schreiben, welches mir einen Windows-Kontakt unter Vista anlegt. Dazu nutze ich die Windows API von JEDI. Nun gibt es da eine Funktion 'SHCreateStreamOnFileEx', mit der man laut dem Beispiel aus der MSDN den Kontakt in einen Stream und somit dann in eine Datei schreibt. Nun ist das Problem der Aufruf dieser Funktion

Deklaration vom Stream
Delphi-Quellcode:
aIStream : ^IStream;
Aufruf der Funktion
Delphi-Quellcode:
SHCreateStreamOnFileEx(sFile, STGM_WRITE, FILE_ATTRIBUTE_NORMAL, True, nil, @aIStream);
Allerdings bringt er mir ne Fehlermeldung und zwar:

Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen.

Habe schon einige möglichkeiten durchprobiert, aber immer die gleiche Fehlermeldung. Wie muss ich denn den IStream deklarieren und die Funktion aufrufen?

Gruß

dingsbums

Sharky 1. Sep 2009 10:18

Re: Vista Kontakt schreiben
 
Hai dingsbums,

ersteinmal: "Herzlich Willkommen in der Delphi-PRAXuS" :hello:

Wie ist den der Header von SHCreateStreamOnFileEx deklariert?

dingsbums 1. Sep 2009 10:21

Re: Vista Kontakt schreiben
 
Deklaration von SHCreateStreamOnFileEx in der JEDI API
Delphi-Quellcode:
function SHCreateStreamOnFileEx(pszFile: PWideChar; grfMode, dwAttributes: DWORD; fCreate: BOOL; pstmTemplate: IStream; out ppstm: IStream): HResult stdcall;
In der MSDN
Zitat:

HRESULT SHCreateStreamOnFileEx(
LPCWSTR pszFile,
DWORD grfMode,
DWORD dwAttributes,
BOOL fCreate,
IStream *pstmTemplate,
IStream **ppstm
);
Wobei das Beispiel in der MSDN nur einen einfachen Pointer benutzt Erstellen eines neuen Kontakts

DeddyH 1. Sep 2009 10:34

Re: Vista Kontakt schreiben
 
Und wenn Du es so umschreibst?
Delphi-Quellcode:
aIStream : IStream;
...
SHCreateStreamOnFileEx(sFile, STGM_WRITE, FILE_ATTRIBUTE_NORMAL, True, nil, aIStream);

dingsbums 1. Sep 2009 10:36

Re: Vista Kontakt schreiben
 
Zitat:

Zitat von DeddyH
Und wenn Du es so umschreibst?
Delphi-Quellcode:
aIStream : IStream;
...
SHCreateStreamOnFileEx(sFile, STGM_WRITE, FILE_ATTRIBUTE_NORMAL, True, nil, aIStream);

Gleiche Fehlermeldung. So hatte ich es auch schon versucht, da ich erst komplett auf Pointer verzichtet hatte.

DeddyH 1. Sep 2009 10:37

Re: Vista Kontakt schreiben
 
Von welchem Typ ist sFile?

dingsbums 1. Sep 2009 10:38

Re: Vista Kontakt schreiben
 
sFile ist ein PWideChar und da steht der Dateiname der zu erstellenden Datei drin.

Delphi-Quellcode:
sFile : PWideChar;
...
sFile := 'NewContact.Contact';

DeddyH 1. Sep 2009 10:40

Re: Vista Kontakt schreiben
 
Dann hab ich im Moment auch keinen zündenden Einfall.

jfheins 1. Sep 2009 11:30

Re: Vista Kontakt schreiben
 
Etwas Q&D: Die Deklaration umändern zu .....pstmTemplate: IStream; ppstm: Pointer): HResult stdcall;
und dann aufrufen wie am Anfang?

dingsbums 1. Sep 2009 11:36

Re: Vista Kontakt schreiben
 
Liefert leider den gleichen Fehler. :(

Edit: Vergessen das 'out' wegzumachen, dann compiliert er. Danke. Mal schaun obs nun auch funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 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