Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: C softaa vb6 muotoon

Sivun loppuun

juffe [01.10.2019 23:33:09]

#

Moi
Onko mahdollista muuttaa tätä koodin pätkää vb6 muotoon?

Mun VB6 ohjelmassa on vaihtuvat latitude ja longitude arvot muuttujissa ja pitäisi tuon koodinpätkän avustuksella yrittää selvittää kyseiselle sijainnille geoidiarvo.
Kannattaisiko tuota pätkää koittaa kääntää exe muotoon ja sitten käyttää exeä vb6 avulla? Vai olisiko helpompaa vaan kääntää koodi suoraan vb6 muotoon?

Tuosta C kielestä nyt en ymmärrä oikein mitään.

peran [02.10.2019 07:56:46]

#

juffe kirjoitti:

Moi
Onko mahdollista muuttaa tätä koodin pätkää vb6 muotoon?

On.

juffe kirjoitti:

Kannattaisiko tuota pätkää koittaa kääntää exe muotoon ja sitten käyttää exeä vb6 avulla? Vai olisiko helpompaa vaan kääntää koodi suoraan vb6 muotoon?

Sinulle saattaisi olla helpompaa käyttää exe:n kautta, muttei ohjelma näytä monimutkaiselta kääntää vb6:lle. Jos ei ole mitään varsinaista syytä (esim. nopeuden takia), niin vähemmällä pääsee käyttämällä exeä.

juffe kirjoitti:

Tuosta C kielestä nyt en ymmärrä oikein mitään.

Hieno mahdollisuus tutustua C-kieleen. ;)

Oppaisiin käsiksi vain...
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=c_esittaja

juffe [03.10.2019 11:58:43]

#

Taitaa tuo nopeus tulla vastaan, jos on 5 kertaa sekunnissa muuttuva lat ja lon?

Täytyy varmaan koittaa kääntää vb6 muotoon.

peran [03.10.2019 12:26:52]

#

Pyöritätkö sitä todella mopo-koneella ?

Ei tuon 5xSekunnissa pitäisi olla koneelle mikään onglema, varsinkaan ohjelman ollessa noin pieni.

Toki kauniimmin saa toimimaan kääntämällä VB-muotoon.

juffe [03.10.2019 13:18:01]

#

Ei kyllä ole mikään mopokone:) Eli toimisi. Mites jos tuota käyttäisi exenä, niin miten saa palautumaan exen tuloksen muuttujaan?
Kun tuo ohjelma nyt palauttaa komentokehotteeseen printillä tuloksen.

Itse asiassa sain tuon käännettyä jo windows exeksi(tosin Linuxilla), kun tuntui tulevan niin kauheasti erroria Visual Studion kautta käännettäessä.

peran [03.10.2019 13:46:36]

#

(En ole juurikaan käyttänyt Visual Basiciä, ja siitäkin kun viimeksi käytin on aikaa yli kymmenen vuotta. Enkä omista VB:tä.)

Yritin googlata aiheesta, mutta en löytänyt kaunista tapaa...

Rumalla tavalla voisi tehdä siten, että ohjaisi exe:n tuloksen tiedostoon ja lukisi tiedostosta tuloksen.

Jotain tällaista voisi yrittää...

Shell "D:\Omat\oma.exe parametri1 parametri2 >D:\Omat\Omattulokset\tulos.txt", vbNormalFocus

Tässä siis tulos lähetään tulos.txt-tiedostoon. Rumaa, eikä toimi moniajossa.

juffe [03.10.2019 13:47:13]

#

Ilmeisesti pitäisi kuitenkin modifoida tuota c koodia että palauttaisi tuloksen jonnekkin väliaikaistiedostoon, jonka jälkeen Vb:llä luetaan tuolta välitiedostosta. Ehkä kuitenkin yritän kääntää suoraan vb muotoon tuon koodin.

Grez [03.10.2019 13:52:42]

#

Tuosta peranin esimerkikstäkin kyllä käy ilmi että voit putkittaa sen tuloksen tiedostoon ilman että c-koodia tarvitsee muokata.

Selma-koira [03.10.2019 14:08:50]

#

Yks vaihtoehto on tehdä siitä C-koodista perus "dll" ja käyttää VB:stä sitä tai COM-komponentti. Jos teet siitä ActiveX:n (COM), niin voit napsutella sen koodiin mukaan sieltä Visual Basicin "references" osastolta eikä tarvi DllImportteja sinne VB-koodin sekaan ja kaikki on siistin näköistä ja mukavaa.

juffe [03.10.2019 15:19:39]

#

Toi dll kuulostaa hyvältä.
Mites toi kääntäminen?
Näillä ohjeilla sain käännettyä, mutta Windows ei suostu sitä rekisteröimään.

i686-w64-mingw32-gcc -c geoid-hm.c
i686-w64-mingw32-gcc --shared geoid-hm.o -o test_dll.dll

Selma-koira [03.10.2019 15:27:13]

#

ok. Auttaisko tämä: https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019

Lisäys: Ja sit tälleen kutsut VB:stä: https://docs.microsoft.com/en-us/cpp/build/calling-dll-functions-from-visual-basic-applications?view=vs-2019

juffe [03.10.2019 16:06:19]

#

Ongelma on tuon Visual Studion kanssa tuolla koodilla, eli ilmoittaa että:

Severity	Code	Description	Project	File	Line	Suppression State
Error (active)	E0167	argument of type "const char *" is incompatible with parameter of type "char *"	Dll2	C:\Users\J\source\repos\Dll2\Dll2\dllmain.cpp	119

Selma-koira [03.10.2019 16:17:41]

#

Miltäs tuo dllmain.cpp näyttää?

juffe [03.10.2019 17:44:23]

#

No niin, nyt onnistuin tekemään tuosta ActiveX dll tiedoston ja näkyy siellä references osiossa. Klikutin sen päälle ja object browseriin tuli näkymään mut Classes kohdassa lukee vain <globals>.

Mites tuota nyt pitäisi osata käskyttää?

Selma-koira [04.10.2019 09:56:25]

#

Noi ActiveX (COM) dll:t on vähän erilaisia kuin ihan peruskirjastot. Niille pitää toteuttaa pari rajapintaa eli sinne koodiin pitää lisätä vähän lisäsälää, ellei se Visual Studio tai muu työkalu, jolla teet, lisää niitä automaattisesti.

Lisäksi pitää ihan samalla tavalla kuin perusdlliäkin tehdessä antaa esikääntäjälle tietoa, mitkä funktiot siitä kirjastosta tehdään käytettäväksi kirjaston ulkopuolelle, eli mitkä on sun "exportit" - siellä on declspec makroja tai jotain vastaavaa.

Sit pitää ehkä vähän funtsia haluatko ton ActiveX-komponentin omaan prosessiin vai pyörimään samassa prosessissa sun muun sovelluksen kanssa - in-process ja out-of-process https://docs.microsoft.com/en-us/previous-versions/windows/desktop/automat/in-process-and-out-of-process-server-objects. EXE:t menee omaan prosessinsa, .ocx ja .dll samaan prosessiin (siis sen prosessin kanssa, joka pyytää käyttistä dll:ää lataamaan).

Olen tehnyt viimeksi tuotantoon menneitä ActiveX-komponentteja vuonna 2000, joten tietoni voivat olla osin vanhentuneita - ehkä palstalla on tekijöitä, joilla on tuoreemmat tiedot. Toivottavasti tästä oli kuitenkin apua.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta