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/)
-   -   C++ Propertiesdialog (https://www.delphipraxis.net/110687-propertiesdialog.html)

Mark90 22. Mär 2008 14:33


Propertiesdialog
 
hi alle zusammen,

ich versuche gerade mir den eigenschaften dialog für dateien anzeigen zu lassen, doch leider klapp das irgendwie nicht!

Es tritt immer ein Fehler mit einer zugriffsverletztung auf!

mein code:
Code:
void PropertyDialog(const AnsiString FileName)
{
   SHELLEXECUTEINFO sei;

   memset(&sei, sizeof(sei), 0);
   sei.cbSize = sizeof(sei);
   sei.lpFile = FileName.c_str();
   sei.lpVerb = "properties";
   sei.fMask = SEE_MASK_INVOKEIDLIST;
   ShellExecuteExA(&sei);

}

toms 22. Mär 2008 14:42

Re: Propertiesdialog
 
Hallo, vielleicht muss man hwnd und evtl. nSHow auch initialisieren.
Code:
sei.hwnd = hWndParent;
sei.nShow = SW_SHOW;

marabu 22. Mär 2008 15:00

Re: Propertiesdialog
 
Hallo,

bei mir funktioniert es so:

Delphi-Quellcode:
var
  sei: TShellExecuteInfo;
begin
  FillChar(sei, SizeOf(sei), 0);
  with sei do
  begin
    cbSize := SizeOf(sei);
    lpFile := PChar(ParamStr(0));
    lpVerb := 'properties';
    fMask := SEE_MASK_INVOKEIDLIST;
  end;
  if not ShellExecuteEx(@sei) then
    ShowMessage(SysErrorMessage(GetLastError));
end;
Vielleicht gibt die Fehlermeldung einen Hinweis darauf, was schief läuft?

Freundliche Grüße

Mark90 22. Mär 2008 15:27

Re: Propertiesdialog
 
es tritt immer ein ERROR (EAccessViolation) Zugriffsverletzung bei Adresse blablabla.. könnte es sein das memset was anderes macht als fillchar? ich kenn nämlich diese func nicht!

Außerdem, wenn ich einen Pointer auf die SHELLEXECUTEINFO erstelle, dann taucht kein Fehler auf. allerdings passiert auch sonst nichts.

ich hab k.a. woran das liegt!

ich bekomme mit folgendem code auch keinen error angezeigt (in messagebox)
Code:
if (!ShellExecuteExA(&sei))
      ShowMessage(SysErrorMessage(GetLastError()));

marabu 22. Mär 2008 15:41

Re: Propertiesdialog
 
Kannst du nicht feststellen bei welchem Statement genau deine Function abbricht?

Mark90 22. Mär 2008 15:43

Re: Propertiesdialog
 
Zitat:

Zitat von marabu
Kannst du nicht feststellen bei welchem Statement genau deine Function abbricht?

die funktion bricht bei shellexecuteex ab!

Waldteufel 22. Mär 2008 15:48

Re: Propertiesdialog
 
Hallo Mark90.

Laut http://www.cplusplus.com/reference/c...ng/memset.html ist Memset definiert als
Code:
void * memset ( void * ptr, int value, size_t num );
Die letzten beiden Parameter hast du aber anscheinend vertauscht. Probier mal
Code:
memset(&sei, 0, sizeof(sei));
Gruß,
Waldteufel

Mark90 22. Mär 2008 15:52

Re: Propertiesdialog
 
Zitat:

Zitat von Waldteufel
Hallo Mark90.

Laut http://www.cplusplus.com/reference/c...ng/memset.html ist Memset definiert als
Code:
void * memset ( void * ptr, int value, size_t num );
Die letzten beiden Parameter hast du aber anscheinend vertauscht. Probier mal
Code:
memset(&sei, 0, sizeof(sei));
Gruß,
Waldteufel

Danke! Nur der eine Parameter war der Auslöser dafür, dass das ganze nicht gefunzt hat. :-D


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