1400 invalid handle

  • 11 Odpowiedzi
  • 2247 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline lemkat

  • ***
  • 257
  • Płeć: Mężczyzna
    • http://www.lemkat.webd.pl
  • Sprzęt: HTC HD2
1400 invalid handle
« dnia: Wrzesień 23, 2005, 22:58:54 »
Witam
Nie wiem czemu ale kod ktory dzialal wlasnie przestal:

Powoluje do zycia DialogBox z menu:

DialogBox( hInst , (LPCTSTR)IDD_ADD_PART, hWnd , (DLGPROC)AddPartProc );

w jej funkcji zwrotnej po wcisnieciu klawiszu OK chce odczytac tekst z kontrolki Edit Box:
LRESULT CALLBACK AddPartProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
// ....
case WM_INITDIALOG:
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
return TRUE;
case WM_COMMAND:
wmId    = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch( wmId )
{
case BID_ADD_PART:
// symbol czesci
iCount = GetDlgItemText( hDlg , EID_PART , pBuffer , 10 );
                if( iCount == 0 )
                         {
                         iCount = GetLastError();
                         }
i tu jest problem "hDlg" jest uchwytem DialogBox mimo to w momencie wywolania funkcji odczytu tekstu mam kod 1440 ( invalid handle ), gdzie moze byc blad ???


Jakkolwiek bym nie probowal nie moge uzyskac uchwyt tego onkna:
FindWindow etc...

Jeszcze jedna dosc istotna rzecz:
w msdn znalazlem ze funkcja jest zdeklarowana w Afxwin.h dopuki jej nie podlacze progs sie kompiluje i wszystko jest ok, jak ja podlacze progs mi sie wywala:
 D:\programowanie\WindowsCE\SerwisCzesci\SerwisCzesci.cpp(303) : error C2065: 'GetDlgItemText' : undeclared identifier
musi sie grysc z jakas inna biblioteka ;/

*

Offline MacBirdie

  • *****
  • 1943
  • Płeć: Mężczyzna
  • I znów Poznań ;)
    • macbirdie.net
  • Sprzęt: iPhone 4 16GB | iPad 3G 64GB | iPhone 3G 8GB
1400 invalid handle
« Odpowiedź #1 dnia: Wrzesień 24, 2005, 10:40:34 »
Nieee, afxwin.h to akurat nagłówek z biblioteki MFC, nie dołączaj go do swojego projektu, skoro działasz w czystym Win32 (korzystając "po cichu" z winuser.h).

Dziwna sytuacja z tym uchwytem.
Sprawdź czy w momencie tworzenia dialogu uchwyt okna jest taki sam jak otrzymywany przez jego procedurę.

*

Offline lemkat

  • ***
  • 257
  • Płeć: Mężczyzna
    • http://www.lemkat.webd.pl
  • Sprzęt: HTC HD2
1400 invalid handle
« Odpowiedź #2 dnia: Wrzesień 24, 2005, 12:47:44 »
Witam


Zadeklarowalem globalna zmienna HWND hAdd;

w momencie tworzenia okna robie tak:

case WM_INITDIALOG:
...
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
hAdd = hDlg;
return TRUE;
// ...
// i potem sprawdzenie czy uchwyt jest ten sam
case WM_COMMAND:
wmId    = LOWORD(wParam);
wmEvent = HIWORD(lParam);
switch( wmId )
  {
  case BID_ADD_PART:
  // symbol czesci
  if( hAdd == hDlg )
   {
   MessageBox( NULL , TEXT("Ten sam") , TEXT("Ok") , MB_OK );
   }
i wyglada na to ze uchwyt jest ten sam ;(

*

Offline MacBirdie

  • *****
  • 1943
  • Płeć: Mężczyzna
  • I znów Poznań ;)
    • macbirdie.net
  • Sprzęt: iPhone 4 16GB | iPad 3G 64GB | iPhone 3G 8GB
1400 invalid handle
« Odpowiedź #3 dnia: Wrzesień 24, 2005, 13:10:14 »
A co będzie jeśli zamiast
(LPCTSTR)IDD_ADD_PART
zrobisz MAKEINTRESOURCE(IDD_ADD_PART)
Jest to już nieco desperacka poprawka, bo raczej nic nie wniesie, no ale... ;)

Może ewentualnie wyzeruj zawartość SHINITDLGINFO przed ustawianiem jego parametrów? To też tak na wszelki wypadek, bo chyba zazwyczaj nie trzeba tego robić.

*

Offline lemkat

  • ***
  • 257
  • Płeć: Mężczyzna
    • http://www.lemkat.webd.pl
  • Sprzęt: HTC HD2
1400 invalid handle
« Odpowiedź #4 dnia: Wrzesień 24, 2005, 13:20:42 »
niestety nic nie wnosi do sprawy, co najsmieszniejsze ten kod wczesniej dzialal, czy moze to miec cos wspolnego z ustawieniami dialog box ????
(typ, wyglad etc...)

[Dodano: 2005-09-24 13:50:06]
wiec zapytam tak ;( czy jest jakis inny sposob uzyskania tekstu z kontrolki Edit Box ( ciezko sie przyzwyczaic do tego vc , ech )

*

Offline MacBirdie

  • *****
  • 1943
  • Płeć: Mężczyzna
  • I znów Poznań ;)
    • macbirdie.net
  • Sprzęt: iPhone 4 16GB | iPad 3G 64GB | iPhone 3G 8GB
1400 invalid handle
« Odpowiedź #5 dnia: Wrzesień 24, 2005, 14:19:34 »
Póki EID_PART nadal istnieje, nie powinno być problemu.
A pBuffer gdzie trzymasz i w jakiej postaci?

Wyciągnąć tekstu raczej inaczej się nie da, metoda z której korzystasz po prostu MUSI działać.
Jest to na pewno kontrolka tekstowa? Na pewno widoczna? Aktywna?

*

Offline lemkat

  • ***
  • 257
  • Płeć: Mężczyzna
    • http://www.lemkat.webd.pl
  • Sprzęt: HTC HD2
1400 invalid handle
« Odpowiedź #6 dnia: Wrzesień 24, 2005, 14:32:14 »
Deklaracja bufora na text z kontrolki:
LPTSTR pBuffer;
Kontrolka to Edit Box

Jest aktywna skoro do niej wpisuje tekst ;/

Jeszcze jedno, w kursie ( jakims tam ) wyczytalem ze mozna dodac do kontrolki zmienne ( variables ) postepuje jak pisze czyli na formie prawym daje class wizard i tam chce dla mojej kontrolki dodac zmienna ale vc sie burzy ze nie ma okreslonego typu zmiennej dla tej kontrolki:
"there is no data types for this kind of control"

Chyba miales racje z ta nauka programowania w vc po bcb, praktycznie od zera ;/

*

Offline MacBirdie

  • *****
  • 1943
  • Płeć: Mężczyzna
  • I znów Poznań ;)
    • macbirdie.net
  • Sprzęt: iPhone 4 16GB | iPad 3G 64GB | iPhone 3G 8GB
1400 invalid handle
« Odpowiedź #7 dnia: Wrzesień 24, 2005, 14:54:48 »
pBuffer może zmień na TCHAR?

Niestety tak jest w przypadku czystego Win32 - zaczynasz od zera, masa do nauczenia się. Nawet gdybyś chciał sobie to ułatwić WTLem (a polecam), to i tak musisz wiedzieć jak to wszystko działa.

Borlandowski VCL rzeczywiście został dość ładnie zrobiony i zorganizowany, dlatego też pewnie główny projektant tej biblioteki trafił do Microsoftu by stworzyć C# i inne dopiero nadchodzące nowości. ;)

*

Offline lemkat

  • ***
  • 257
  • Płeć: Mężczyzna
    • http://www.lemkat.webd.pl
  • Sprzęt: HTC HD2
1400 invalid handle
« Odpowiedź #8 dnia: Wrzesień 25, 2005, 00:32:46 »
Problem rozwiazany, nie wiem czemu walil invalid handle ale problem polegal na buforze przechwytujacym dane:

tak nie dziala:
LPTSTR pBuffor;
GetDlgItemText( hDlg ,IDC_ADD_SYMBOL, pBuffor, 10 );

a tak wszystko jest ok:
TCHAR Buffor[ 12 ]
GetDlgItemText( hDlg ,IDC_ADD_SYMBOL, (LPTSTR)Buffor, 10 );

cos sie musialo walic w pamieci bo ze dwa razy pierwszy sposob dzialal

Pozdrawiam

*

Offline MacBirdie

  • *****
  • 1943
  • Płeć: Mężczyzna
  • I znów Poznań ;)
    • macbirdie.net
  • Sprzęt: iPhone 4 16GB | iPad 3G 64GB | iPhone 3G 8GB
1400 invalid handle
« Odpowiedź #9 dnia: Wrzesień 25, 2005, 04:04:31 »
A widzisz, sugerowałem to już :P
Cytat: MacBirdie
pBuffer może zmień na TCHAR?

*

Offline PiKNew

  • ***
  • 437
  • Płeć: Mężczyzna
  • Sprzęt: iPaq h5550, Loox n560
1400 invalid handle
« Odpowiedź #10 dnia: Wrzesień 25, 2005, 11:40:28 »
błąd był nie w typie, ale w braku alokacji pamięci (przypadek, że wcześniej tamten kod działał, bo prawdopodobnie losowa wartość wskaźnika po deklaracji wzkazywała na "mało istotne dane", które były w tym przypadku nadpisywane)...

LPTSTR == TCHAR *

*

Offline MacBirdie

  • *****
  • 1943
  • Płeć: Mężczyzna
  • I znów Poznań ;)
    • macbirdie.net
  • Sprzęt: iPhone 4 16GB | iPad 3G 64GB | iPhone 3G 8GB
1400 invalid handle
« Odpowiedź #11 dnia: Wrzesień 25, 2005, 12:52:29 »
Fakt, zbyt oczywiste to było, by wskaźnik kierował na jakąś zaalokowaną pamięć. B)