Witam.
Jako że wszystkie odpowiedzi odnoszą się do Delphi i nie pomagają to może ktoś zajarzy co jest u mnie nie tak.
A więc...
Mam kod który skopiowany i wklejony działa idealnie pod warunkiem że jest bezpośrednio wykonywany a nie przez funkcję.
W chwili kiedy wykonuję go przez funkcję dostaję błąd :
"Access violation at adress 765EF7CC in module 'KERNELBASE.DLL'. Read of address 00000028."
Kod :
void __fastcall TForm1::DeleteFilesX(String FilePath)
{
bool Recycled;
if(CoB_Delete->ItemIndex == 0) Recycled = true;
else if(CoB_Delete->ItemIndex == 1) Recycled = false;
if(Recycled)
{
//ShowMessage("Przeniesiono do kosza : \n" + ExtractFileName(FilePath));
SHFILEOPSTRUCT fos;
fos.hwnd = Handle;
//operacja kasowania plików
fos.wFunc = FO_DELETE;
//pliki do skasowania
String Plik = FilePath + "\0";
fos.pFrom = Plik.c_str();
//przeniesienie plików do kosza po ich skasowaniu
fos.fFlags = FOF_ALLOWUNDO;
SHFileOperation(&fos);
}else{
ShowMessage("Kasowanie trwałe !!!");
//DeleteFile(FilePath);
};
}
funkcja zdeklarowana jest w private jako :
void __fastcall DeleteFilesX(String FilePath);
Udało mi się sprawdzić że błąd powstaje podczas już koncowego wykonania "SHFileOperation(&fos);"
I to wywala błąd właśnie....
Nie wywala za to jak wykonam go tak :
SHFILEOPSTRUCT fos;
fos.hwnd = Handle;
//operacja kasowania plików
fos.wFunc = FO_DELETE;
//pliki do skasowania
String Plik = CheckListBox1->Items->Strings[CheckListBox1->ItemIndex] + "\0";
fos.pFrom = Plik.c_str();
//przeniesienie plików do kosza po ich skasowaniu
fos.fFlags = FOF_ALLOWUNDO;
SHFileOperation(&fos);
Mam nadzieję że uda się wam mi coś poradzić bo już nie wiem co źle robię :(