Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Integracja z powłoką, DLL i brak dostępu do danych programu.

Ostatnio zmodyfikowano 2012-01-30 13:51
Autor Wiadomość
pekfos
Temat założony przez niniejszego użytkownika
Integracja z powłoką, DLL i brak dostępu do danych programu.
» 2011-09-04 15:28:56
Integruję mój program z powłoką tak by podwójnym kliknięciem otwierać tym programem pliki o konkretnym rozszerzeniu. Testuję ten mechanizm i, drogą dodania kilku coutów do kodu, zauważyłem że program nie może otworzyć swojego pliku z danymi (wtf?!).

Ścieżka do pliku jest podana jako względna i jest jak najbardziej poprawna.
Gdy uruchamiam program przez powłokę to program nie ma dostępu do swoich danych.
Gdy wczytuję ten plik programem który był już wcześniej uruchomiony to (oczywiście) wszystko działa.
Gdy uruchamiam program przez cmd w taki sposób jak to robi powłoka to program działa poprawnie.

Dodam jeszcze że program ma ten problem tylko z jednym plikiem który jest wczytywany w zewnętrznej bibliotece DLL wczytywanej w czasie wykonania.

Co może być przyczyną?
P-40480
malan
» 2011-09-04 21:03:17
Poczekaj aż ten plik "zwolni" (zamknie) biblioteka (DLL).
P-40511
pekfos
Temat założony przez niniejszego użytkownika
» 2011-09-04 21:08:56
znaczy że samo zniszczenie fstreama nie wystarczy? DLL jest używany tylko w jednej funkcji która jest tak samo wywoływana we wszystkich przypadkach a błąd występuje tylko w jednym..
P-40513
malan
» 2011-09-04 21:20:42
Miałem na myśli to, że jeżeli program A pracuje z plikiem abc.wtf, to program B dostępu do pliku abc.wtf miał nie będzie. Wydaje mi się, że możesz robić coś podobnego. Chyba, że Cię źle zrozumiałem.
Próbowałeś stary i sprawdzony sposób -"Remove&Create"?
P-40516
pekfos
Temat założony przez niniejszego użytkownika
» 2011-09-05 15:02:47
"Remove&Create"?
Pierwszy raz słyszę(a przynajmniej pod tą nazwą). Chodzi ci o to by plik usunąć i ponownie utworzyć?
P-40537
malan
» 2011-09-05 19:23:22
Nic dziwnego, że nie słyszałeś, bo wczoraj to wymyśliłem. Tak, o to mi chodziło.
P-40556
pekfos
Temat założony przez niniejszego użytkownika
» 2011-09-06 16:35:15
Jak ja coś wymyślę to następnego dnia nie nazywam tego starą sprawdzoną techniką :P

naprawianie..
fail. to nie to.

w międzyczasie zauważyłem że inny plik DLL który za pomocą io.h listuje pewien folder w katalogu z programem (ścieżka względna) nic nie znajduje mimo że jest tam sporo plików.
P-40589
pekfos
Temat założony przez niniejszego użytkownika
» 2012-01-30 13:51:30
Przypadkiem znalazłem rozwiązanie. Uruchamiając program przez explorer program pracował na innym katalogu (gdzieś w katalogach systemowych (Ehh, ta Vista..)). Rozwiązanie problemu:
C/C++
#include <string>
#include <windows.h>

using std::string;

int main( int argc, char ** argv )
{
    {
        char tab[ 1024 ];
        GetModuleFileName( NULL, tab, 1024 );
        string str = tab;
        string::size_type siz = str.find_last_of( "/\\" );
        if( siz == string::npos ) return 0;
       
        str = str.substr( 0, siz );
        SetCurrentDirectory( str.c_str() );
    }
Zamykam :>
P-49803
« 1 »
  Strona 1 z 1