olen kääntänyt vc expressillä pari ohjelmaa win32 exeksi (ei .net) ja ne toimis kun vc oli asennettu. kun laitoin windowsin uudelleen, exet ei toimi vaan valittaa että sovelluksen kokoonpano on viallinen (eli varmaan joitain dlliä puuttuu).
exe on tekstipohjainen, yksinkertainen ohjelma.
voiko vc lla tehdä sitten ohjelmia jotka toimii myös koneissa joissa kääntäjää eikä platform sdk:ta ole asennettu? vai mitä tuo vaatii?
pistin jo msvcp80.dll ja msvcr80.dll system32 hakemistoon, ei auttanut.
asetin sen kääntämään win32 ohjelmia näillä ohjeilla: http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/
xp sp2.
exe on tekstipohjainen, yksinkertainen ohjelma.
voiko vc lla tehdä sitten ohjelmia jotka toimii myös koneissa joissa kääntäjää eikä platform sdk:ta ole asennettu? vai mitä tuo vaatii?
pistin jo msvcp80.dll ja msvcr80.dll system32 hakemistoon, ei auttanut.
asetin sen kääntämään win32 ohjelmia näillä ohjeilla: http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/
xp sp2.
Vastaukset 11
Vanhimmat
Lataile depends.exe:
http://www.dependencywalker.com/
ja katsele mitä kirjastoja ohjelma käyttää. Jos jotain dll ei löydy, ohjelma näyttää kirjaston punaisena.
Itse kun oon käännelly visual studiolla, en oo käytelly noita ms*.dll -kirjastoja enkä sulauttanut ohjelmankaan sisään. Paljon pienempiä ohjelmia tulee käyttämällä api -funktioita, ja ne dll:t löytyvätkin jokaisesta wintoosasta.
hei, tuo onkin kätsy softa. kiitti tiedosta. olinki sählänny jotain ite, nyt kun asensin .net2 niin ohjelmat toimii. olenkin varmaan kääntänyt ne väärin.
semmoinen täppäkohta, missä lukee suunnilleen siten, että "static linking", laita siihen kohtaan täppä, mutta jossulla on toinen sensijaan täppäkohta, jossa sanotaan kutakuinkin siten, että "dynamic linking", ota siitä kohtaa täppä pois ja linkitä se projektis uudestaan.
Ite käytän semmosta asetusta et Hello World -ohjelma tulee ulos 768 tavuisena. Siitä ainaki tietää onks asetukset kunnossa :o
ookaan, mutta tutustu staattisen ja dynaamisen eli vissiinkinsä käännösaikaisen ja ajonaikaisen linkittämisen eroihin ja plussiin ja miinuksiin: ne menevät kääntäjästä riippumatta aina samalla rutiinilla eli on kuin polkupyöräily, jonka yhdellä fillarilla opittuaan osaa kaikilla.
Pienenä erona on vaan se ettei windows apeista oo sellaisia lib -tiedostoja et staattinen linkitys onnistuis. Mut jos ohjelma käyttäis C:n kirjastofunktioita, asetus tietysti merkkais.
Useimmissa C -kääntäjissä ohjelmat vaan tahtovat paisua vaik ohjelman toiminta ois vain pientä ku käytetään C:n (tai varsinkin C :n) kirjastofunktioita - ihan sama käytettiin dynaamista tai staattista linkitystä.
sun upee ohjelmas ei yhtään toimi kaveril kun sil ei oo justiinsa samanlaista kääntäjää. Kertakaikkiaan: sähän teet van sellaisen asentelupaketin, että siinä tulee mukana kaikki kirjastot ja heti skulaa ja jää sen ohjelma koko kin niin helkkarin piäneksi, jos sitä teratavun kirjastoa ei lasketa.
Solutionin / projektin asetuksiin "Use MFC in static libraries", niin johan pelaa. Niin ja käännä Release-versio, debug tarvii jos mitä dll:iä.
Perus-MFC dll:t ovat msvcrt.dll (C runtime) ja mfc42.dll (mahdollisesti uudemmat versiot, eli esim. mfc71.dll tai jotakin). Visual Studion asennusmedialla on jossakin Redist-folder, siellä kerrotaan kohdekoneella eri tilanteissa tarvittavat DLL:t.
Mihin tota MFC:tä tarvitaan ? Kyseessähän oli yksinkertainen DOS -ohjelma. Suurin osa komennoista löytyy jokaisen wintoosan mukana tulevista dll:stä (kernel32,user32,gdi32). Eikä tarvii huolehtii versioista ku komennot on lähes samat jokaisessa versiossa.
MFC:llähän kierrellään pitkän mutkan kautta samoihin wintoosan apeihin.
No jos olet tuota mieltä, niin älä käytä MFC-luokkia. Ei sitten tarvita niitä dll:iäkään (paitsi että msvcrt on microsoft visual c runtime library, eli se taidetaan tarvita).
Minusta MFC-luokat helpottavat kyllä koodausta, mutta jos haluat tehdä kaiken aina itse alusta alkaen, niin siitä vaan. Esimerkkinä nyt merkkijonon käsittely, tiedostokäsittely, ajan käsittely, jne. Kaikki onnistuu raaalla c:llä / c :lla, mutta koodaus on vain vähän itkuisempaa.
MFC:llekin on kyllä käyttöä, kun esim. tehdään AutoCadin päälle lisäkilkukkeita. Sillä saa näppärästi valikoita ym. En tosin tajuu miks MFC:tä pitää tunkea joka paikkaan. Pieniki ohjelma ni heti MFC. Vähä niinku tässä:
http://hp.vector.co.jp/authors/VA000092/jokes/strup-e.html
Mitä vaikeuteen tulee ni valmiilla makroilla saa kirjottelun aika helpoks ja virhekohdan löytäminen on huomattavasti helpompaa. Enempi se taitaa kuitenki olla tottumiskysymys millä tavalla tykkää kirjotella.
msvcrt ei oo pakollinen, sen pois ottaminen vaan vaatii et käyttelet niitä win apeja tietämys mikä on se todellisen aloitusfuntion nimi.
Esim seuraava Visual C 6 ei käytä msvcrt:tä:
#include
char teksti[]="Hello World!";
#ifndef _DEBUG
void mainCRTStartup(){
#else
void main(){
#endif
void *stdh;
unsigned written;
stdh=GetStdHandle(-11);
WriteFile(stdh,teksti,sizeof(teksti),&written,NULL);
}