Forum » Programiranje » [ c# ] NullRefferenceException
[ c# ] NullRefferenceException
atasmrk ::
Torej, sledeco kodo sem skopiral z neta (no, ne cisto vse, tisto if in naprej dol).
pred tem pa imam deklarirani strukturi v istem razredu
Ob prevajanju te kode mi javi warning
PRINTER_NOTIFY_INFO.Version' is never assigned to, and will always have its default value 0
ob izvajanju prve vrstice znotraj if-a pa tisti slavni
System.NullReferenceException: Object reference not set to an instance of an object.
Tu imam pa toliko stvari, da ne vem, kateri ogjekt zadeva misli. Se komu kaj vec sanja?
public bool startMonitoring()
{
IntPtr pNotifyInfo = IntPtr.Zero;
IntPtr handle = IntPtr.Zero;
int change = 0;
int waitResult = 0;
handle = FindFirstPrinterChangeNotification(hPrinter, PRINTER_CHANGE_JOB, 0, IntPtr.Zero);
waitResult = WaitForSingleObject(handle, INFINITE);
if ( FindNextPrinterChangeNotification(handle, ref change, IntPtr.Zero, out pNotifyInfo))
{
PRINTER_NOTIFY_INFO info = (PRINTER_NOTIFY_INFO) Marshal.PtrToStructure (pNotifyInfo, typeof (PRINTER_NOTIFY_INFO));
int pData = (int)pNotifyInfo + Marshal.SizeOf( ypeof(PRINTER_NOTIFY_INFO));
PRINTER_NOTIFY_INFO_DATA[] data = new PRINTER_NOTIFY_INFO_DATA[info.Count];
for ( uint i = 0; i < info.Count; i++ )
{
data[i] = (PRINTER_NOTIFY_INFO_DATA)Marshal.PtrToStructure((IntPtr)pData, typeof(PRINTER_NOTIFY_INFO_DATA));
pData += Marshal.SizeOf( typeof(PRINTER_NOTIFY_INFO_DATA));
}
FreePrinterNotifyInfo( pNotifyInfo );
Console.WriteLine("konec branja strukture");
}
return false;
}
pred tem pa imam deklarirani strukturi v istem razredu
struct PRINTER_NOTIFY_INFO
{
public uint Version;
public uint Flags;
public uint Count;
// Array of PRINTER_NOTIFY_INFO_DATA follows
}
struct PRINTER_NOTIFY_INFO_DATA
{
public ushort Type;
public ushort Field;
public uint Reserved;
public uint Id;
public uint cbBuf; // or adwData[0]
public IntPtr pBuf; // or uint adwData[1]
}
Ob prevajanju te kode mi javi warning
PRINTER_NOTIFY_INFO.Version' is never assigned to, and will always have its default value 0
ob izvajanju prve vrstice znotraj if-a pa tisti slavni
System.NullReferenceException: Object reference not set to an instance of an object.
Tu imam pa toliko stvari, da ne vem, kateri ogjekt zadeva misli. Se komu kaj vec sanja?
- spremenilo: atasmrk ()
Kekec ::
Za začetek bi lahko preveril če ti je sploh kaj dalo v pNotifyInfo, če je pa prazen pa je exception čist razumljiv!
atasmrk ::
Ja, ekekec, to je bilo to. Nic se ni tja noter zapisalo. In ko sem se se malo poglobil v MSDN, sem opazil, da s tistim IntPtr.Zero sploh ne zahtevam podatkov. Tako sem deklariral se eno strukturo PRITNER_NOTIFY_OPTIONS
in jo porinil na tisto mesto v klicu procedure, kjer je bila potrebna. tistega buf se sploh nisem dotika, ker sem flags nastavil na PRINTER_NOTIFY_OPTIONS_REFRESH, in bi torej ta funkcija morala vse druge clane te strukture ignorirati.
Sedaj pa dobim NullRefferenceException v klicu funkcije FindNexPrinterChangeNotification(). In mi se zmeraj ni jasno, kaj je narobe. Kaj bi pa sedaj, laho bilo 0?
struct PRINTER_NOTIFY_OPTIONS
{
public uint Version;
public uint Flags;
public uint Count;
public IntPtr buf;
}
in jo porinil na tisto mesto v klicu procedure, kjer je bila potrebna. tistega buf se sploh nisem dotika, ker sem flags nastavil na PRINTER_NOTIFY_OPTIONS_REFRESH, in bi torej ta funkcija morala vse druge clane te strukture ignorirati.
Sedaj pa dobim NullRefferenceException v klicu funkcije FindNexPrinterChangeNotification(). In mi se zmeraj ni jasno, kaj je narobe. Kaj bi pa sedaj, laho bilo 0?
atasmrk ::
ce pa naredim
in potem klicem
pa stvar vrne false, GetLastError() pa vrne ERROR_INVALID_PARAMETER. Kaki prebliski?
PRINTER_NOTIFY_OPTIONS notifyOptions; IntPtr no = IntPtr.Zero; notifyOptions.Count = 0; notifyOptions.Flags = PRINTER_NOTIFY_OPTIONS_REFRESH; notifyOptions.Version = 2; notifyOptions.buf = IntPtr.Zero; no = Marshal.AllocCoTaskMem(Marshal.SizeOf(notifyOptions));
in potem klicem
if (FindNextPrinterChangeNotification(this.hChangeObject, ref change, no, pNotifyInfo))
pa stvar vrne false, GetLastError() pa vrne ERROR_INVALID_PARAMETER. Kaki prebliski?
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | [C#] pixel scan z ThreadOddelek: Programiranje | 1303 (1085) | perooo25 |
| » | kako narediti program ki bere drugi programOddelek: Programiranje | 6231 (4544) | imagodei |
| » | video v c#Oddelek: Programiranje | 1633 (1173) | boss-tech |
| » | [C#] Sesutje aplikacijeOddelek: Programiranje | 1755 (1590) | Jean-Paul |
| » | [C#] unmanaged->managed codeOddelek: Programiranje | 2271 (2146) | Zzzzzzz |