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.
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.
Taitaa tuo nopeus tulla vastaan, jos on 5 kertaa sekunnissa muuttuva lat ja lon?
Täytyy varmaan koittaa kääntää vb6 muotoon.
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.
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ä.
(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.
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.
Tuosta peranin esimerkikstäkin kyllä käy ilmi että voit putkittaa sen tuloksen tiedostoon ilman että c-koodia tarvitsee muokata.
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.
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
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
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
Miltäs tuo dllmain.cpp näyttää?
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ää?
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.