Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    5

    errore "pinvoke" nell'apertura di un file

    salve, premetto che da poco mi sto cimentando con visual studio.
    In particolare ho l'esigenza di aprire alcuni file da una finestra con dei pulsanti.
    Per fare ciò ho creato un modulo con questo codice:


    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Const SW_NORMAL = 1
    Public Sub ExecFile(ByVal fileName As String)
    Dim ret As Long
    ret = ShellExecute(0, "open", fileName, "", "", SW_NORMAL)
    If ret <= 32 Then
    Err.Raise(51, "ExecFile", "Impossibile eseguire il file """ & fileName & """." & vbCrLf & "Codice di errore di ShellExecute: " & LTrim(CStr(ret)) + ".")
    End If
    End Sub


    e sull' evento click del mio pulsante ho chiamato la procedura Execfile passando il percorso del file da aprire.

    E qui viene il bello.

    Se effettuo il debug non mi da nessun errore, ne tantomeno, quando compilo il progetto, ma nel momento in cui lo eseguo mi restituisce un errore sulla funzione ShellExecute:

    PInvokeStackImabalance

    Una chiamata alla funzione PInvoke 'AVVIO_APP_ACCESS!AVVIO_APP_ACCESS.openfile::Shell Execute' 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.


    E' tutto il giorno che provo ma nulla.

    Un aiutino è ben accetto...

  2. #2
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Non ho idea dove sia l' errore...ma per aprire un file basta una riga di codice...
    Dai una lettura qui:
    http://msdn.microsoft.com/it-it/library/92699yzt.aspx

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    5
    Grazie...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    29
    Prova con System.IO.File
    Ad esempio con System.IO.File.ReadAllText leggi tutto il contenuto di un file.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quello che pessino vuole fare non è aprire un file ma eseguire il programma associato ad un determinato file per utilizzarlo con tale programma (ad esempio, avviare Word indicando un file x.doc).

    Il problema del tuo codice è che deriva dal VB6 e non è adeguato per il mondo .NET. In particolare, per farlo funzionare dovresti cambiare la riga che hai scritto per la API con

    codice:
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As IntPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer
    tenendo conto di usare il tipo IntPtr per l'handle e l'Integer al posto del Long.

    In ogni caso questo è sempre un "vecchio" modo di affrontare il problema mentre dovresti farlo con quello che il .NET ti mette a disposizione, ovvero la classe

    System.Diagnostic.Process
    http://msdn.microsoft.com/it-it/libr...ostics.process(v=vs.100).aspx

    che ti permette di fare quello che desideri in maniera moderna e in linea con il mondo .NET.

    Infine, mi pare di notare che il tuo problema non aveva nulla a che fare con il "Visual Studio 2010" ma che fosse un normale problema di codice. Sarebbe stato meglio aprire il tuo problema di codice nella sezione

    http://forum.html.it/forum/forumdisp...?s=&forumid=56

    dove avresti trovato più facilmente e velocemente risposta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    5
    Ho risolto utilizzando Process.start specificando il programma e il file da aprire.

    Sorry....per aver sbagliato dove postare.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da pessino
    Ho risolto utilizzando Process.start specificando il programma e il file da aprire.

    Sorry....per aver sbagliato dove postare.
    Prego ... di nulla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.