Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Inf su P\Invoke

    Salve,

    Ultimamente sto avendo la necessità di creare delle mie librerie attraverso
    il PInvoke.
    Nelle varie documentazioni del MSDN ho notato che tutte le sintassi delle
    API comprese le strutture dati da passare a esse ed i relativi esempi,sono scritti, se non erro, in C++.
    (sinceramente faccio un po di confusione tra C++ e C#)

    Mi chedo, il fatto che io stia cercando di scrivere delle dll in visualbasic.net
    possa limitarmi in qualcosa?
    Potreste spiegarmi quali sono, se esistono, i limiti che si potrebbero avere
    nello scrivere del codice in VisualBasic.net rispetto ad uno scritto in C#

    Grazie Nicola

  2. #2
    Non ho ben capito cosa tu abbia intenzione di fare: se stai cercando di scrivere una libreria in VB.NET, questa può usare le chiamate ad altre dll (siano esse COM o dll "standard", come quelle delle API) attraverso PInvoke, senza particolari limitazioni tranne l'ovvia scomodità di utilizzare in VB.NET qualcosa pensato per essere usato con il C; solitamente basta un normale Declare (oppure l'attributo DllImport) per utilizzare una funzione API, ma in alcuni casi potrebbe essere più complesso.
    Se invece vuoi che la tua dll VB.NET possa essere richiamata da applicazioni non .NET, mi spiace ma è impossibile.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Una precisazione: le dll COM non vengono richiamate attraverso PInvoke, bensì utilizzando dei COM Wrappers.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Ciao,
    Cerco si spiegarmi meglio.
    Il mio obbiettivo finale è la gestione di un modem GPRS di un pocket pc e per questo penso che occore utilizzare le RAS.

    Tra queste c'è la RasDIAL che permette lo connessione alla rete GPRS e di cui riporto la sua sintassi che trovo nel MSDN:

    DWORD RasDial(
    LPRASDIALEXTENSIONS dialExtensions,
    LPTSTR phoneBookPath,
    LPRASDIALPARAMS rasDialParam,
    DWORD NotifierType,
    LPVOID notifier,
    LPHRASCONN pRasConn
    );

    Volendo chiamare la funzione (ad esempio supponendo di voler creare un modulo o una classe) nel mio codice in visualbasic, dovrei usare la seguenti sintassi:

    <DllImport("Coredll.dll")>
    private shared function RasDial(byVal..........,.............,............ .....)As........
    End Function

    Il mio probelma è che non so che tipo di parametri passare alla funzione, infatti:
    1) il ritorno della funzione è definito come DWORD, e dalla guida leggo che è un 32 bit
    unsignend integer;
    Mi chiedo a cosa corrisponde questo DWORD in visualbasic.net 2003 visto che il tipo dati
    interi sono tutti con segno? (ho letto invece che il vb.net 2005 gestisce anche gli interi
    definiti "UInteger" i quali sembrerebbero fare al caso mio in quanto sono 32 bit unsignend
    integer ).
    Stesso discorso per i parametri LPRASDIALEXTENSIONS,LPRASDIALPARAMS,LPVOID,
    LPHRASCONN i quali sono definiti all'interno di typedef di tipo DWORD.
    2) Infine c'è il parametro LPTSTR che viene definito in una struttura Typedef di tipo CHAR e
    dalla guida leggo che risulta essere una "8-bit Windows (ANSI) character.", mentre i
    char del visualbasic sono da due byte.

    Ho letto qualcosina riguardo al Marshaling dei dati ma per ora per me è un tabù.

    Spero di essermi spiegato.

    Grazie Nicola.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.