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