[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Blad podczas zamykania aplikacji

Radek

10/5/2007 7:44:00 AM

Zrobi3em sobie dll'ke z kodu C++ i wywo3uje z niej metode (dodam, ?e w
kodzie C++ by3a to funkcja main, co zreszt? mo?na sie domy?lia po
parametrach):

[DllImport("moja.dll", CallingConvention = CallingConvention.Cdecl,
SetLastError=true)]
public static extern int Rozkaz(int argc, string[] argv);

Wywo3uje te metode w C# z takimi samymi parametrami, z jakimi by3a ona
wywo3ywana z linii polecen (po kompilacji kodu C++ do pliku .exe). Wszystko
dzia3a dobrze, metoda sie wywo3a3a, zwróci3a interesuj?cy mnie wynik, ale w
momencie zamykania mojej aplikacji (WinForm), pojawia sie okno:

Start.vshost.exe - B3?d aplikacji
Instrukcja spod "blablabla" odwo3uje sie do pamieci pod adresem "blebleble".
Pamiea nie mo?e bya "written". Kliknij przycisk OK, aby przerwaa dzia3anie
aplikacji.

Klikam OK, okno znika, ale Visual Studio pozostaje ca3y czas w trybie
"Running". Czasami w komunikacie zamiast "written" jest "read".
Gdy ustawi3em atrybut SetLastError=true, przechwyci3em kod b3edu
Marshal.GetLastWin32Error() i zwraca 6, czyli ERROR_INVALID_HANDLE.

Co mo?e bya przyczyn? tego b3edu?

--
Radek

4 Answers

Jacek Czerwinski

10/5/2007 8:04:00 AM

0

Dnia Fri, 5 Oct 2007 09:44:07 +0200, Radek napisa3(a):

> Zrobi3em sobie dll'ke z kodu C++ i wywo3uje z niej metode (dodam, ?e w


> Instrukcja spod "blablabla" odwo3uje sie do pamieci pod adresem "blebleble".
> Pamiea nie mo?e bya "written". Kliknij przycisk OK, aby przerwaa dzia3anie
> aplikacji.
> Co mo?e bya przyczyn? tego b3edu?

Masz typowe b3edy C.

gonzak

10/5/2007 8:10:00 AM

0

> Klikam OK, okno znika, ale Visual Studio pozostaje ca3y czas w trybie
> "Running". Czasami w komunikacie zamiast "written" jest "read".
> Gdy ustawi3em atrybut SetLastError=true, przechwyci3em kod b3edu
> Marshal.GetLastWin32Error() i zwraca 6, czyli ERROR_INVALID_HANDLE.


zwolnij pamiec zwiazana z wywolana funkcja :) i bedzie ok ewentualnie gdzies
wyszedles poza pamiec i to samo sie dzieje

--
Archiwum grupy: http://niusy.onet.pl/pl.comp.p...

Radek

10/5/2007 8:53:00 AM

0

U?ytkownik "Rafal sxat" <gonzak@op.pl> napisa3 w wiadomo?ci
news:001101c80727$1962e650$01a8a8c0@sxar.pl...

> zwolnij pamiec zwiazana z wywolana funkcja :) i bedzie ok ewentualnie
> gdzies wyszedles poza pamiec i to samo sie dzieje

Gdy zrobi3em w C++ free() to teraz pod C# mam okienko z komunikatem:

Microsoft Visual C++ Debug Library
Debug Assertion Failed!
Program: (sciezka do mojego programu C#)
File: dbgheap.c
Line: 1132
Expression: _CrtIsValidHeapPointer(pUserData)

Nie wiem co robia, nie jestem obeznany w C++, dosta3em kod i zrobi3em z
niego dll'ke...

--
Radek

Jacek Czerwinski

10/5/2007 9:19:00 AM

0

Dnia Fri, 5 Oct 2007 10:53:29 +0200, Radek napisa3(a):

> U?ytkownik "Rafal sxat" <gonzak@op.pl> napisa3 w wiadomo?ci
> news:001101c80727$1962e650$01a8a8c0@sxar.pl...
>
>> zwolnij pamiec zwiazana z wywolana funkcja :) i bedzie ok ewentualnie
>> gdzies wyszedles poza pamiec i to samo sie dzieje
>
> Gdy zrobi3em w C++ free() to teraz pod C# mam okienko z komunikatem:

> Expression: _CrtIsValidHeapPointer(pUserData)
>
> Nie wiem co robia, nie jestem obeznany w C++, dosta3em kod i zrobi3em z
> niego dll'ke...

To masz problem, dosta3e? kod z b3edami, co bya mo?e trafnie podpowiada
Rafa3. S? naprawde klasyczne, typowe b3edy które mo?na pope3nia w C, plus
jednak do?wiadczenie ?eby je wy3apaa.
?eby by3o ?mieszniej, C (i ogólnie jezyki niskiego poziomu) jest bardzo
podatne na ukryte b3edy, ujawniajace sie np.rok pó?niej po jakiej? drobnej
zmianie. Je?li odbiór po poprzedniku to "kod 'dobry' bo nie daj?cy General
Exception", to wypada gratulowaa.