Genymus
14-07-2010, 15:00
Salve, ho utilizzato l'Api 'ExtractIcon' per estrarre icone da Exe e Dll scrivendo questo codice:
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Function CountElement(ByVal Path As String) As Integer
Return (ExtractIcon(0, Trim(Path), -1))
End Function
Function GetElement(ByVal Path As String, ByVal Number As Integer) As System.Drawing.Bitmap
Return (System.Drawing.Icon.FromHandle(ExtractIcon(IntPtr.Zero, Trim(Path), Number)).ToBitmap)
End Function
Funzionava bene fino a quando, dopo aver configurato il compilatore sui 32 al posto dei 64 bit, mi è comparso questo errore:
PInvokeStackImbalance è stata rilevata
Una chiamata alla funzione PInvoke 'ExtrIco!ExtrIco.Main::ExtractIcon'
ha sbilanciato lo stack. Questo problema può verificarsi quando la firma PInvoke
gestita non corrisponde alla firma di destinazione non gestita. Verificare che la
convenzione di chiamata e i parametri della firma PInvoke corrispondano alla
firma di destinazione non gestita.
Cosa devo fare premettendo che questa applicazione funzionerà su computers che girano a 32bit?
Ps: l'Api c'è anche nei sistemi x86 quindi credo di aver sbagliato nella chiamata.
Grazie
Genymus
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Function CountElement(ByVal Path As String) As Integer
Return (ExtractIcon(0, Trim(Path), -1))
End Function
Function GetElement(ByVal Path As String, ByVal Number As Integer) As System.Drawing.Bitmap
Return (System.Drawing.Icon.FromHandle(ExtractIcon(IntPtr.Zero, Trim(Path), Number)).ToBitmap)
End Function
Funzionava bene fino a quando, dopo aver configurato il compilatore sui 32 al posto dei 64 bit, mi è comparso questo errore:
PInvokeStackImbalance è stata rilevata
Una chiamata alla funzione PInvoke 'ExtrIco!ExtrIco.Main::ExtractIcon'
ha sbilanciato lo stack. Questo problema può verificarsi quando la firma PInvoke
gestita non corrisponde alla firma di destinazione non gestita. Verificare che la
convenzione di chiamata e i parametri della firma PInvoke corrispondano alla
firma di destinazione non gestita.
Cosa devo fare premettendo che questa applicazione funzionerà su computers che girano a 32bit?
Ps: l'Api c'è anche nei sistemi x86 quindi credo di aver sbagliato nella chiamata.
Grazie
Genymus