Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149

    [VB.NET]API Text viewer

    Ciao a tutti, ho provato a cercare in giro ma non trovo niente di utile

    Ho letto che per VB6 esisteva un tool che permetteva di creare le dichiarazioni delle funzioni che richiamano le API di Windows. Esiste una cosa simile in VB.NET oppure da scaricare??Andrebbe anche bene una semplice guida visto che è il mio primo approccio alle API.

    Grazie in anticipo

  2. #2
    Certo che è possibile ti faccio due esempi:

    VB.NET
    codice:
    <DllImport("kernel32.dll")> _
    Public Shared Sub GetSystemTime(ByRef lpSystemTime As SYSTEMTIME)
    End Sub
    C#
    codice:
    [DllImport("TestDll.dll", EntryPoint="sum",
    		ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]
    		static extern int sum(int a,int b);
    Occhio a fare Debug con le API di sistema ...

  3. #3
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Originariamente inviato da MItaly
    http://www.pinvoke.net/
    Vorrei aggiungere che questo sito riporta nella maggior parte dei casi dichiarazioni scritte in VB ma, qualora non fossero presenti, li mette anche in altri linguaggi come ad esempio il C#. Dato che il molti casi si possono trovare sorgenti su internet che richiamano metodi dell'API di windows, bisogna fare attenzione a come sono scritti, poichè molte volte i tipi dei parametri sono errati e sbilanciano lo stack. Pinvoke.net, e lo dico per esperienza personale, è affidabilissimo e riporta definizioni sempre esatte, un'ottima fonte per documentarsi.

  5. #5
    Originariamente inviato da Il Totem
    poichè molte volte i tipi dei parametri sono errati e sbilanciano lo stack.
    Già. Molti usano le dichiarazioni fornite dall'API Text Viewer di VB6, che non vanno bene in VB.NET, visto che i nomi dei tipi di dati sono cambiati (Integer è diventato Short, Long è diventato Integer e si è aggiunto il nuovo tipo Long da 64 bit).
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    grazie per le risposte...a me serve solo codice VB.NET

    @ raffaeu: grazie per il pezzo di codice ma a me serviva creare queste funzioni senza dover cercarle su internet...sapendo solo che un oggetto esiste in una DLL

  7. #7
    Ma a te servono le dichiarazioni per le API di Windows o di una dll di terze parti?
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    mah...entrambe...cioè mi servirebbe una specie di "schema" per riuscire a fare le dichiarazioni delle API di windows

    e quindi se dovessi utilizzare le API di una dll di terze parti(ad esempio ho visto quella di windows messenger che mi interessa) sia in grado di utilizzarla

  9. #9
    Per le dichiarazioni delle API di Windows affidati a PInvoke.net; per il resto considera che su piattaforme a 32 e a 64 bit solitamente le corrispondenze dei tipi fondamentali C con quelli VB.NET sono int e long -> Integer, short -> Short, long long e __int64 -> Long, unsigned int e unsigned long -> UInt32, unsigned short -> UInt16, unsigned long long e unsigned __int64 -> UInt64. Poi ci sono delle conversioni meno automatiche, ad esempio char corrisponde sicuramente a Byte, ma può corrispondere anche a Char se nella dichiarazione VB.NET si specifica che la funzione è ANSI; Char invece corrisponderà a wchar_t se nella dichiarazione VB.NET si specifica che la funzione è Unicode. Quanto ai tipi puntatore (qualunquecosa *) in alcuni casi va bene un ByRef associato al tipo di base (ad esempio, int * parametro -> ByRef parametro As Integer), mentre in altri può essere necessario usare un IntPtr (questo vale sempre per i void *, per cui void * parametro -> ByVal parametro As IntPtr); in generale i puntatori comunque richiedono spesso attenzioni speciali. Le stringhe (char * oppure wchar_t *) sono spesso un casino; di solito può bastare un ByVal parametro As String (ricordandosi di specificare che la funzione è ANSI se c'è char * o che è Unicode se c'è wchar_t *), ma in casi più complessi (specie se si deve passare un buffer di date dimensioni che verrà modificato dalla funzione richiamata) può servire un oggetto StringBuilder. Per quanto riguarda gli array cambia molto a seconda della funzione che chiami e non saprei dare una regola generale. A complicare ulteriormente la questione c'è il fatto che quasi sempre le librerie scritte in C chiamano i tipi di dato che usano con degli alias definiti in qualche loro header piuttosto che con i loro nomi normali per evidenziare cosa rappresenta quel parametro (ad esempio nelle API di Windows a seconda delle occasioni viene usato DWORD o UINT, entrambi sinonimi di unsigned int). Comunque l'argomento non è semplicissimo (specie se non conosci il C) e queste sono solo delle linee guida molto generali; in linea di massima ti consiglio di chiedere consiglio a chi se ne intende piuttosto che usare dichiarazioni di cui non sei sicuro, che possono causare corruzione della memoria e crash al tuo programma.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    Grazie per la risposta...

    Il linguaggio C lo conosco abbastanza(2 anni alle superiori)

    Cercherò di guardare se c'è cio che mi serve su pinvoke.net

    grazie ciau

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.