18 messaggi dal 30 luglio 2019
Buona domenica a tutti. Non so se sto postando nel forum giusto, ma non vi ho trovato VB.NET.. pertanto se ho sbagliato scusatemi.

Dopo anni di sviluppo in VB6 ho sempre fatto fatica a convertirmi a vb.net (ne ero restio mentalmente. Anche per non perdermi tutte le mie funzioni e dll sviluppate e perfettamente funzionanti sia in vb6 che in VBA).

Ora mi sono deciso a provare a fare il grande passo. Ma veramente sto facendo fatica a ritrovarmici. E' tutto completamente cambiato! Ottengo solo errori di cui alcuni riesco pian piano a risolvere, ma altri non riesco nemmeno a trovare qualche suggerimento nei vari testi che ho. Non capisco perché tutti si preoccupano di scrivere capitoli sul .net framework e sull'ide e poche cose sulle funzioni e modalità d'uso di vb.net... francamente non lo capisco. I testi per VB6 erano tutti incentrati sulle funzioni e sulla sintassi e sul codice di cui prima o poi ne avresti fatto tesoro.

Sto utilizzando VS2012 ed il testo "Visual Basic 2012 di Bochicchio ed altri.." - Hoepli-Aspitalia


Comunque bando alle chiacchiere (solo uno sfogo) e vengo alla mia prima domanda:

Come si traduce in codice VB.NET queste semplici righe scritte in VB6?:

Dim strTemp As String
'Create a buffer
strTemp = string(100, Chr$(0))



e la seguente chiamata a dll API windows:

Public Declare Function GetTempPath Lib "kernel32.dll" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long



Grazie a tutti e scusami per le mie ignoranze e difficoltà nel passare a vb.net...

Alip1
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao e benvenuto nel forum!
il .NET Framework è molto vasto, è normale che tu ti senta spaesato all'inizio. La migrazione a VB.NET sarebbe più semplice se venissi affiancato da qualcuno che ha già esperienza. Senza questo supporto, sarà più frustrante ma non impossibile.
Comunque, io credo che a prescindere da quale sarà la difficoltà nel tuo caso, è un passo che dovrai obbligatoriamente compiere per tenere aggiornate le tue competenze. Non parlo solo di sintassi, ma anche di programmazione orientata agli oggetti anziché alle "funzioni".
Quindi bravo per aver iniziato e per la tua volontà di voler capire.


Dim strTemp As String
'Create a buffer
strTemp = string(100, Chr$(0))

Questo codice produce una stringa lunga 100 caratteri e il carattere in questione è quello il cui codice ASCII e 0 (cioè NUL).
Io posso tradurtela in VB.NET ma dovresti chiarire qual è l'obiettivo che vuoi raggiungere, perché magari far questo in VB.NET non è necessario o si fa in tutt'altro modo. Quindi: cosa vuoi ottenere creandoti una stringa di 100 caratteri NUL? Ti serve come buffer per la successiva chiamata a GetTempPathA? Se sì, come vedrai non c'è bisogno di farlo.

Public Declare Function GetTempPath Lib "kernel32.dll" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

In molti casi invocare le API di Win32 non è necessario perché parecchi metodi sono esposti dal .NET Framework, quindi vedrai che tutto diventerà più facile. Presumo che il tuo obiettivo qui sia ottenere il percorso alla directory temporanea di Windows.
Quindi, per trovare la soluzione vai su google e scrivi: "VB.NET get temp path". Clicca il primo risultato e ci trovi dentro questo esempio:
string result = Path.GetTempPath();  


Visual Studio potrebbe segnarti in rosso la parola "Path". Ti sta dicendo che non riesce a trovarlo e perciò serve uno using in cima al file. Premi CTRL+. oppure clicca la lampadina che apparirà di fianco e clicca la prima voce in elenco. Verrà aggiunto uno using System.IO in cima al file. Problema risolto.

Puoi vedere qualcosa di simile in questa immagine.
https://www.c-sharpcorner.com/article/auto-suggest-with-spell-check-quick-fix-vs-2015-update-2/Images/image001.png

ciao,
Moreno
Modificato da BrightSoul il 04 agosto 2019 12:15 -

Enjoy learning and just keep making
18 messaggi dal 30 luglio 2019
Grazie Moreno sei fantastico sopratutto per l'incoraggiamento. Si è vero nel web si riesce a trovare di tutto. M il problema sta nel fatto che le risposte sembrano scritte per chi sa già.
Per il buffer grazie non mi serve solo il gettemppath ma anche per altri usi come per leggere un file ini con la api win32 readprofile...
Grazie per la tua squisita disponibilità
Antonio
Modificato da alip1 il 04 agosto 2019 15:55 -

Alip1
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Antonio,
dimentica le win32, impara ad usare soltanto i metodi esposti dal .NET Framework.
Un domani potresti voler cominciare ad usare .NET Core, che è multipiattaforma, e se vuoi che le tue applicazioni possano funzionare anche su linux non devi far affidamento su win32. Sono veramente rari i casi si usano direttamente.

Se la funzionalità non è direttamente esposta dal .NET Framework, come nel caso della lettura dei file .ini, puoi pur sempre procurarti un pacchetto NuGet, che ti permetterà di aggiungere una libreria al progetto in maniera molto semplice.

Quindi, dal pannello "Solution explorer" di Visual Studio, fai tasto destro su references e clicca "Manage NuGet Package" come vedi fare in questa immagine.
https://docs.microsoft.com/it-it/nuget/tools/media/managepackagesuicommand.png

Poi, nella casella di ricerca scrivi ini-parser e installa il pacchetto.

Ora sei pronto per iniziare a usarlo. Ecco una guida, è in C#. Abituati all'idea che per VB.NET troverai pochi esempi perché il grosso della community di sviluppatori preferisce di gran lunga usare C#.

https://github.com/rickyah/ini-parser#getting-started

Cerca di carpire l'intenzione di quel codice e poi prova a convertirlo in VB.NET. Se non riesci, puoi aiutarti con questo convertitore.
http://converter.telerik.com/

Se non riesci ancora, ti aiuto io. Ma prima provaci.

ciao,
Moreno
Modificato da BrightSoul il 04 agosto 2019 16:29 -

Enjoy learning and just keep making
18 messaggi dal 30 luglio 2019
Grazie molto utile.

Il fatto é che passare a .NET é già un problema se poi devo ricominciare anche con C# rischio di perdermi un'altra volta !!

Alla prossima
Modificato da alip1 il 05 agosto 2019 10:12 -

Alip1
18 messaggi dal 30 luglio 2019
Ciao Moreno scusami se ti disturbo continuamente... Ma sto cercando di cambiare alcune mie librerie in VB6 in VB.NET... come sai...

Ora avrei una funzione di questo tipo in cui apro un file x la scrittura (il file può esistere o meno!!):

Public Function CreaFileUsrCfg(stFileUsrwithPath As String) As Boolean
Dim iFreeFile As Integer
iFreeFile = FreeFile
Open stFileUsrwithPath For Append As #iFreeFile
Print #iFreeFile, "'***** For USER *****"
Print #iFreeFile, vbCrLf
Print #iFreeFile, "[QB]"
Print #iFreeFile, vbCrLf
Print #iFreeFile, "Key="
Close #iFreeFile
CreaFileUsrCfg = True
End Function

Ma come si traduce in VB.NET??? (Gli esempi valgono + di tante parole come sai!!)


Grazie
Modificato da alip1 il 05 agosto 2019 11:11 -
Modificato da alip1 il 05 agosto 2019 11:12 -
Modificato da alip1 il 05 agosto 2019 11:13 -
Modificato da alip1 il 05 agosto 2019 11:16 -

Alip1
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Antonio,


Gli esempi valgono + di tante parole come sai!!

Certo, anche se il mio ruolo qui non è quello di fornire esempi per ogni caso esistente ma è quello di insegnarti a pescare.

Dunque, come abbiamo fatto anche in precedenza, vai su Google e scrivi "VB.NET write text file".
Come primo risultato viene fuori questa pagina, in cui trovi un esempio:
https://docs.microsoft.com/it-it/dotnet/visual-basic/developing-apps/programming/drives-directories-files/how-to-write-text-to-files-with-a-streamwriter

Come vedi, l'oggetto StreamWriter ti permette di scrivere su righe di testo. Quando vuoi chiuderlo, invoca il suo metodo Close (o meglio Dispose).

Altra soluzione, ancora più facile perché il file non deve neanche essere esplicitamente aperto. Ci pensa il metodo AppendAllText ad aprire, scrivere e chiudere.
string path = @"c:\temp\MyTest.txt";
string appendText = "This is extra text" + Environment.NewLine;
File.AppendAllText(path, appendText);


Documentata qui:
https://docs.microsoft.com/it-it/dotnet/api/system.io.file.appendalltext?view=netframework-4.8

ciao,
Moreno

Enjoy learning and just keep making
18 messaggi dal 30 luglio 2019
Grazie come sempre.

Senti moreno ma se ho la necessità di fare questo:

Nel MAIN:
1) verifico se esiste
2) if esiste then
provo a cancellarlo
if cancellato then
lo creo e lo tengo aperto
else
......
endif
else
lo creo e lo tengo aperto
endif

nella modulo di chiusuira dell'APPlicazione

!) chiudo il file
2) termino l'APP

Ora qualcosa del genere riuscivo a farlo con freefile... open & append ...

Con lo streamwriter ho l'impressione che apre, scrive e chiude il file... se non ho capito male


Scusami di nuovo e grazie

Alip1

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.