Gå til innhold

Oversetter C/C++ til VB


Anbefalte innlegg

Jeg kommer til å begynne å skrive litt i C/C++ igjen og fikk ideen at det kanskje går an å oversette C/C++ kode til VB (vba for Excel). Det er helt enkle ting jeg har bruk for å oversette: variabeldeklarasjoner, løkker, arrays osv. Finnes det noe sånt program?

 

mvh Sigdal

Endret av Sigdal
Lenke til kommentar
Videoannonse
Annonse

Du kan nok tilnærme deg VB-programmer rent syntaksmessig, men jeg tviler på noen har tatt seg det bryet å utvikle et fullendt automatisk oversettelsesprogram (foruten fra VB6 til .NET) som tar seg av alle programmeringsmønstre, bibliotekskall og andre uforutsette omstendigheter. Du må med andre ord kunne programmere i VB for å bruke et slikt program.

 

Eksempelvis måtte jeg gjøre følgende endringer når jeg benyttet denne netttjenesten for å konvertere fra C++ til VB.NET og endelig VB6:

#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;

const float Pi = 3.1415926535897932384626433832795;

/* converts degree to radian */
float toRadian(float degree)
{
return degree * (Pi / 180);	  
}

int main(int argc, char *argv[])
{
printf("sin(30) = %f\n", sin(toRadian(30)));

system("PAUSE");
return EXIT_SUCCESS;
}

Dette ble oversatt til følgende VB-NET-program:

'Translation of code submitted from xx.xxx.x.xxx

'Converted from C++ by xlat on 2008Sep28.1236

'C++ parser version:2006Jan.A0

 

Imports System

 

Public Class Globals

   Public Shared Pi As float = 3.1415926535897932384626433832795

   Public Shared Function toRadian(degree As float) As float

       Return degree * Pi / 180

   End Function

   Public Shared Function Main(argv() As string) As Integer

       Console.Write("sin(30) = {0}\n",sin(toRadian(30)))

       system("PAUSE")

       Return EXIT_SUCCESS

   End Function

End Class

Dette lar seg imidlertid ikke kompileres. Til det må man modifisere koden kraftig:

Option Explicit ' Påkrever variabeldeklarering

 

'Imports System ' Navneområder eksisterer ikke i VB6/VBA

 

'Public Class Globals ' Man må lage egne filer for klasser, og i dette tilfellet må koden legges

                     ' i en modul. Fjern evt. former om de kommer opp i standardprosjektet.

                     

' Man bruker Const fremfor variabler - i tillegg kan man ikke sette

' variabler samtidig som man deklarerer dem.

Const Pi As Double = 3.14159265358979

   

' Datatypen er Single, ikke float. Videre må parametre settes som ByVal (kontra ByRef (default) - dvs.

' som referansetyper/pointers) dersom C-funksjonen ikke bruker OUT. Endelig er Shared-nøkkelordet

' meningsløst i en VB6-modul.

Public Function toRadian(ByVal degree As Single) As Single

   ' Return-ekvivalenten er å sette en intern variabel med samme navn

   ' som funksjonen og hoppe ut av kjøringen med Exit-operasjonen

   toRadian = degree * Pi / 180

   Exit Function ' Nokså unødvendig her dog

End Function

 

' Main er en tom prosedyre. For å avlese args må man bruke Command()

Public Sub Main()

   ' Da VB6 (og VBA forørig) ikke kan kompilere til konsollapplikasjoner, må man implementere

   ' dette manuelt ved å bruke API-funksjoner/eksterne biblioteker samt endre på enkelte

   ' attributter i selve EXE-filen (fremgangsmåten/verktøyet kan graves frem med Google).

   

   ' Her har jeg valgt å bruke VBCorLib (velg Project - References og avmerker

   ' VB.EXT: VBCorLib 2.3 eller last det ned og bla deg frem til DLL-filen i overnevnte dialogboks)

   Console.WriteValue "sin(30) = {0}{1}", Sin(toRadian(30)), vbCrLf ' Man bruker ikke paranteser

   ' rundt prosedyrekall. I tillegg kan man ikke escape (/n) karakterer. Dette må legges ved

   ' manuelt (her: vbCrLf)

   

   ' Man kan også skrive en ny linje således:

   'Console.WriteLine "Ny linje"

   

   ' System ("PAUSE")

   Console.WriteValue "Press any key to continue."

   Console.Read

   

   ' Unødvendig da vi har med en prosedyre å gjøre

   'Return 0 'EXIT_SUCCESS

End Sub

'End Class

Til sist står vi igjen med følgende VB6-program. Hva dette eksempelet angår ville det nok vært lettere å ha oversatt programmet direkte:

Option Explicit

 

Const Pi As Double = 3.14159265358979

   

Public Function toRadian(ByVal degree As Single) As Single

   toRadian = degree * Pi / 180

End Function

 

Public Sub Main()

   Console.WriteValue "sin(30) = {0}{1}", Sin(toRadian(30)), vbCrLf

   Console.WriteValue "Press any key to continue."

   Console.Read

End Sub

Endret av aadnk
Lenke til kommentar

Ok. Takk for webtipset. Jeg har bare programmert VB i excel og da virker det som koden er litt enklere enn det som kommer ut der: Kun Sub og End Sub og programmet innimellom.

 

Saken var at C/C++ er enklere å programmere, synes jeg, så tenkte jeg kunne spare litt tid mht det :yes: Skal se mer på det.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...