PDA

View Full Version : Visual c++ 6.0 e utilizzo dll


Black imp
27-02-2006, 14:05
sto usando per la prima volta questo vecchio compilatore. Volevo sapere come faccio a fargli linkare le librerie dinamiche anczichè quelle statiche. ho visto nelle proprietà del progetto che linka tutte le .lib. io vorrei che linkasse le dll. devo cambiare anche il codice?
in particolare volevo fargli linkare le opengl le glu e le glaux dinamiche.
grazie :)

Black imp
01-03-2006, 12:23
:eh:

71104
01-03-2006, 18:20
sto usando per la prima volta questo vecchio compilatore. non esageriamo, è solo del '98 ed è ancora validissimo... :mc:

Volevo sapere come faccio a fargli linkare le librerie dinamiche anczichè quelle statiche. scusa ma dubito che tu sappia già come linkare una libreria statica... :mbe:
forse mi sbaglio: dimmi come fai...

ho visto nelle proprietà del progetto che linka tutte le .lib. io vorrei che linkasse le dll. devo cambiare anche il codice? il fatto che nella command line del compilatore siano presenti dei file .lib non vuol dire che tu stia linkando il tuo progetto a delle librerie statiche; chi ti ha messo in testa quest'idea? le versioni statiche di kernel32.dll, gdi32.dll, user32.dll, ecc. non esistono.

in particolare volevo fargli linkare le opengl le glu e le glaux dinamiche. allora hai due possibilità:
1) tra i files del progetto aggiungi il file opengl32.lib che trovi non ricordo dove esattamente nelle directories dove è installato il compilatore (penso qualcosa tipo "C:\Program Files\Microsoft Visual Studio\VC98\Lib")
2) nel codice, nell'header dove includi "gl.h", scrivi:
#pragma comment(lib, "opengl32.lib")
una delle due è sufficiente, scegli tu :)

Black imp
02-03-2006, 01:54
innanzi tutto grazie mille per la pazienza.
premessa: ho ben presente come si linkano e utilizzano librerie dinamiche e statiche sotto linux. trovo molto più difficile capirlo sotto windows.
:) veniamo al problema:

non esageriamo, è solo del '98 ed è ancora validissimo... :mc:


meglio perchè è molto veloce e pratico. solo che ho letto di alcuni bug che sono stati sanati nel .net ... non chiedermi dove perchè sto raccattando info da forum, tutorial e materiale vario tutti i giorni. quindi dici che non c'è bisogno che ne usi uno più recente?


scusa ma dubito che tu sappia già come linkare una libreria statica... :mbe:
forse mi sbaglio: dimmi come fai...

è già impostato di default nel progetto: comunque Project, Properties, Link e c'è tutto l'elenco delle lib che deve linkare. se gli aggiungo le 3 necessarie - gl glu e glaux - va tutto bene ma mi sembra che le lib siano statiche... no effettivamente non ho proprio capito che cosa sono le lib. non sono obj nè dll quindi che cosa sono? dei link alle dll? se sì, io vorrei che rimandassero alle dll fornite con i driver della mia scheda video in modo che utilizzassero le open gl più recenti. le lib che ho aggiunto sono fornite dal compilatore.

http://i34.photobucket.com/albums/d112/blackimp/VS6link.jpg


il fatto che nella command line del compilatore siano presenti dei file .lib non vuol dire che tu stia linkando il tuo progetto a delle librerie statiche; chi ti ha messo in testa quest'idea? le versioni statiche di kernel32.dll, gdi32.dll, user32.dll, ecc. non esistono.


ecco appunto ho fatto confusione. ho confuso le 'non-dll' che di solito hanno suffissi tipo obj con le lib. quindi vale la domanda sopra? che cosa sono le lib e soprattutto se io ho una dll nuda e cruda - o voglio adeguare una lib a una versione più recente della dll - come la costruisco la lib?


allora hai due possibilità:
1) tra i files del progetto aggiungi il file opengl32.lib che trovi non ricordo dove esattamente nelle directories dove è installato il compilatore (penso qualcosa tipo "C:\Program Files\Microsoft Visual Studio\VC98\Lib")


le ho aggiunte come nell'immagine. la directory si setta a parte. cnqeu il concetto è quello che hai riportato


2) nel codice, nell'header dove includi "gl.h", scrivi:
#pragma comment(lib, "opengl32.lib")
una delle due è sufficiente, scegli tu :)


Questa mi interessa tantissimo perchè le direttive pragma non le conosco.


Beh ti ringrazio. Attendo tue delucidazioni - ho visto che c'è anche un documento nell'help "Dll's for beginners" ma non l'ho ancora letto attentamente.
Se hai tempo e vuoi rispondermi ancora più avanti avrei bisogno anche di costruire una mia dll - per adesso sto programmando con un file principale in cui c'è anche l'eseguibile, poi devo togliere la parte col main e farlo diventare una libreria che peraltro dovrò chiamare da mathlab :doh: e trasformerò anche il codice da C a C++ probabilmente ... ma una cosa per volta - :p

71104
02-03-2006, 19:34
innanzi tutto grazie mille per la pazienza.
premessa: ho ben presente come si linkano e utilizzano librerie dinamiche e statiche sotto linux. trovo molto più difficile capirlo sotto windows. dopo aver avuto esperienze in merito in entrambi gli ambienti in tutta sincerità io avrei detto il contrario :mbe:

meglio perchè è molto veloce e pratico. solo che ho letto di alcuni bug che sono stati sanati nel .net ... non chiedermi dove perchè sto raccattando info da forum, tutorial e materiale vario tutti i giorni. quindi dici che non c'è bisogno che ne usi uno più recente? emmammamia, che saranno mai sti bug... la versione 6 va benissimo, poi dipende anche da cosa devi fare esattamente: per esempio per un programma basato su dotnet io userei appunto una versione più recente, sicuramente la 2005 che è aggratise, ma per qualsiasi programma Win32 o MFC alla versione 2005 non ci penso neanche, vado sulla 6 senza pensarci due volte.

è già impostato di default nel progetto: comunque Project, Properties, Link e c'è tutto l'elenco delle lib che deve linkare. appunto, quelle non sono librerie statiche :)

se gli aggiungo le 3 necessarie - gl glu e glaux - va tutto bene ma mi sembra che le lib siano statiche... assolutamente no: a parte che "gl.lib" e "glu.lib" non esistono da nessuna parte (verifica tu stesso), ma poi quelle non sono librerie statiche, sono files lib che contengono informazioni su come e dove il compilatore deve andare a cercare i simboli importati; nel caso specifico, opengl32.lib contine informazioni che dicono al compilatore che tra i simboli importati nel progetto, le funzioni glXxx e gluXxx vanno importate dalle relative DLL; poi il compilatore in fase di compilazione le DLL di OpenGL non le guarda neanche: tutte le informazioni di importazione risiedono nel lib e il compilatore altro non fa che riscriverle in un altro modo nell'immagine eseguibile finale (infatti la compilazione se non erro può avvenire anche senza che sul computer locale siano presenti le immagini da cui si importano simboli, cosa che su Linux, sempre se non erro, non è possibile); l'immagine eseguibile finale quindi conterrà una tabella con vari nomi di DLL e altre immagini da cui quell'immagine effettua qualche importazione, e per ognuna di queste immagini conterrà altrettante tabelle con l'elenco dei simboli importati da ognuna. in fase di runtime l'immagine viene letta dal sistema operativo e vengono cercate tutte le immagini da cui essa dipende, cioè da cui essa importa qualche simbolo: se il sistema operativo trova tutte le immagini e con tutti i simboli richiesti bene, le carica e le binda, altrimenti mostra un messaggio di errore e l'immagine non può essere caricata; se l'immagine il cui caricamento fallisce è l'eseguibile che viene usato per creare il processo allora naturalmente il programma non può essere avviato.

no effettivamente non ho proprio capito che cosa sono le lib. non sono obj nè dll quindi che cosa sono? dei link alle dll? se sì, io vorrei che rimandassero alle dll fornite con i driver della mia scheda video in modo che utilizzassero le open gl più recenti. le lib che ho aggiunto sono fornite dal compilatore. i lib forniti col compilatore non rimandano certo ai drivers di OpenGL specifici della tua scheda video: rimandano semplicemente ad un'unica DLL (dovrebbe chiamarsi proprio "opengl32.dll": di solito i lib hanno lo stesso nome della DLL che descrivono) situata in C:\Windows\system32 che poi effettua il dispatch delle chiamate che riceve ai drivers della scheda video (caricati nel processo del kernel).

[...] e soprattutto se io ho una dll nuda e cruda - o voglio adeguare una lib a una versione più recente della dll - come la costruisco la lib? la lib deve essere necessariamente fornita con la DLL stessa; le lib delle DLL di sistema di Windows (almeno quelle documentate) sono fornite quasi tutte col Visual Studio, o comunque col Platform SDK (che si scarica gratis e che tu, avendo Visual Studio, già hai, anche se in versione un po' vecchia); alcune tipo l'SDK di DirectX vengono col download dell'SDK a parte.
per creare un file lib partendo dalla DLL il modo teorico esiste, ma un programma per farlo che io sappia ancora non esiste; prima degli esami (cioè a inizio gennaio) avevo iniziato a farne uno io stesso dato che penso che sarebbe una cosa utile, ma poi non l'ho continuato appunto a causa degli esami.

Questa mi interessa tantissimo perchè le direttive pragma non le conosco. niente da dire, semplicemente da qualche parte scrivi quella riga che ti ho riportato :p
possibilmente per chiarezza scrivila nello stesso file dove hai messo #include <gl/gl.h>.
le direttive #pragma per definizione sono semplicemente delle direttive che vengono ignorate nel caso il compilatore non riesca a riconoscerle, quindi servono solo ad inserire nel codice direttive specifiche per il compilatore in uso; #pragma comment è specifica dei compilatori Microsoft-compatibili e serve appunto a linkarsi ad un lib che descrive una qualche DLL.

tomminno
02-03-2006, 20:17
non esageriamo, è solo del '98 ed è ancora validissimo... :mc:


Dipende per cosa, ad esempio è un compilatore C++ decisamente limitato, prova ad usare un pò i template e ne riparliamo. Fortunatamente M$ è andata avanti ed oggi ti fornisce addirittura un IDE free (anche se mi è sembrato di capire solo per 1 anno)

Ciao!

71104
03-03-2006, 18:46
Dipende per cosa, ad esempio è un compilatore C++ decisamente limitato, prova ad usare un pò i template e ne riparliamo. non conosco di preciso lo standard del C++ perché non sono mai riuscito a trovare un reference gratuito, completo, preciso e senza tante seghe (il contrario della maggior parte dei libri insomma). dov'è che finisce Microsoft e inizia lo standard? hai provato a compilare un programma C++ disabilitando le estensioni Microsoft del linguaggio?

Fortunatamente M$ è andata avanti ed oggi ti fornisce addirittura un IDE free (anche se mi è sembrato di capire solo per 1 anno) che c'entra... :mbe:

tomminno
03-03-2006, 21:23
non conosco di preciso lo standard del C++ perché non sono mai riuscito a trovare un reference gratuito, completo, preciso e senza tante seghe (il contrario della maggior parte dei libri insomma). dov'è che finisce Microsoft e inizia lo standard? hai provato a compilare un programma C++ disabilitando le estensioni Microsoft del linguaggio?


Mai usato le estensioni Microsoft.
Ormai è qualche anno che non uso più il VC6 come compilatore, comunque ricordo che c'è addirittura un pezzo di codice del libro di Stroustrup che non viene compilato e con una ricerca con google è possibile trovare tanti esempi di classi template che non compilano con VC6. Tra questi vi è anche la libreria MySQL++, che compila solo sotto .NET2003 o superiori.


che c'entra... :mbe:

Significa che la Microsoft è andata molto avanti rispetto a VS6, che ormai è superato sia come editor che come compilatore. Ogni tanto mi tocca usarlo a lavoro per rimettere mano a progetti in VB e oltre all'abominio di linguaggio mi scontro anche con un IDE decisamente fallace.

Ciao!

Black imp
04-03-2006, 02:26
71104

Non ho capito una cosa:

1. se guardi l'immagine che ho linkato ho messo i tre file relativi a opengl col nome corretto, anche se nel descriverti la situazione ho dato dei nomi approssimativi - parlo di opengl32.lib, glu32.lib glaux.lib -.
quello che non capisco adesso è questo: io vorrei usare le opengl 1.4 che sono date dalle 1.1 più le estensioni che vengono poi realizzate mi sembra specificamente dai produttori di schede video: come sfrutto tutte le estensioni di nvidia alle opengl1.1 se le opengl32.dll sono generiche e vecchie? o meglio, è vecchio il file opengl32.lib che contiene i simboli invocabili.

2. se voglio sostruirmi io una dll come si fa? e come faccio una lib per la mia dll?



Tommino: morale che compilatore ide posso usare per scrivere in c e c++ - soprattutto c++ - per windows xp? - non mi interessa la piattaforma .net -



grazie a tutti

71104
04-03-2006, 09:11
quello che non capisco adesso è questo: io vorrei usare le opengl 1.4 che sono date dalle 1.1 più le estensioni che vengono poi realizzate mi sembra specificamente dai produttori di schede video: come sfrutto tutte le estensioni di nvidia alle opengl1.1 se le opengl32.dll sono generiche e vecchie? o meglio, è vecchio il file opengl32.lib che contiene i simboli invocabili. ad ogni modo ricorda che se usi qualche estensione specifica di un solo produttore hardware il tuo programma non girerà su hardware diversi; il tuo programma penso che dovrebbe essere hardware independent (a meno che non hai un motivo specifico affinché non sia tale), quindi tutto quello che devi usare nel tuo programma sta in opengl32.dll (?) e lo importi tramite una versione aggiornata di opengl32.lib; quest'ultima, per rispondere direttamente alla tua domanda, la ottieni scaricando una versione aggiornata del Platform SDK (si scarica gratis dal sito di Microsoft) che poi installerai; durante la fase di installazione (oppure dopo, non ricordo) ti si darà la possibilità di configurare automaticamente la nuova copia del PSDK in Visual Studio.

2. se voglio sostruirmi io una dll come si fa? e come faccio una lib per la mia dll? le DLL sono identiche in tutto e per tutto agli EXE tranne per due cose:
1) un flag che si trova negli headers del file e che viene settato dal linker
2) l'entry point degli exe è progettato per essere eseguito dall'inizio alla fine; quello delle DLL invece è solo un handler per ricevere alcune notifiche e ha il seguente prototipo:
BOOL CALLBACK DllMain(HINSTANCE hinstDLL, DWORD fdwReason, PVOID pvReserved);
il significato dei parametri lo trovi documentato in MSDN.
per creare una DLL in Visual C++ 6 fai File -> New e poi scegli "Win32 Dynamic-Link Library" (oppure scegli "MFC AppWizard (dll)" se vuoi fare una DLL basata su MFC).
in questo modo verrà creato un progetto le cui impostazioni contengono un'opzione che dice al linker che quell'immagine deve essere compilata come DLL, cioè che va settato quel flag che ti dicevo negli headers del file generato.
il lib viene generato automaticamente secondo le impostazioni di default del compilatore; se vuoi puoi anche scegliere di non generarlo deselezionando una certa opzione che adesso non ricordo.
per esportare un simbolo dichiaralo con __declspec(dllexport); per esempio:
__declspec(dllexport) int Foo(int bar);
inoltre ti do un consiglio: tutti i simboli che esporti dichiarali in un header a parte, che sia lo stesso che includerai in tutti i programmi che useranno quella DLL: in tal modo li dichiari una volta sola :)
però se fai così devi fare partiolare attenzione al __declspec: devi definire una macro e fare in modo che questa macro sia definita come __declspec(dllexport) se l'header viene incluso in un file da compilare nella DLL, e __declspec(dllimport) se viene incluso in un file da compilare in un EXE che la usa.
mi spiego meglio con un esempio, mettiamo che tu hai un file a.cpp che fa parte del progetto della DLL, e un file b.cpp che fa parte del progetto di un EXE che la usa; inoltre hai un header c.h che contiene i simboli esportati dalla DLL e importati dall'EXE; ecco il contenuto dei tre files:

a.cpp
#define UNA_MACRO_CHE_TI_PARE
#include "**percorso dell'header**/c.h"

int Foo(int bar) {
return bar;
}

b.cpp
#include "**percorso dell'header**/c.h"

int main() {
return Foo(0);
}


c.h
#ifndef __C_H__
#define __C_H__

#ifdef UNA_MACRO_CHE_TI_PARE
#define #MYDECLSPEC __declspec(dllexport)
#else
#define #MYDECLSPEC __declspec(dllimport)
#endif

MYDECLSPEC int Foo(int bar);

#endif


Tommino: morale che compilatore ide posso usare per scrivere in c e c++ - soprattutto c++ - per windows xp? - non mi interessa la piattaforma .net - per fare quello che chiedi, se hai Visual C++ 6 hai il top (al limite non usare i templates visto che fanno così schifo :rolleyes: ).

71104
04-03-2006, 09:23
Mai usato le estensioni Microsoft. sono settate di default :fagiano:

Ormai è qualche anno che non uso più il VC6 come compilatore, comunque ricordo che c'è addirittura un pezzo di codice del libro di Stroustrup che non viene compilato e con una ricerca con google è possibile trovare tanti esempi di classi template che non compilano con VC6. esempio pratico? :mbe:
me lo scrivi tu sto pezzo di codice che non compila? :mbe:
io su Google trovo solo pezzi che compilano... :fagiano:

Significa che la Microsoft è andata molto avanti rispetto a VS6, che ormai è superato sia come editor che come compilatore. non credo che ci siano tante differenze nel compilatore della versione 2005... :fagiano:
mica li rifanno da zero eh, sempre del compilatore Microsoft si tratta... e Visual C++ non è l'unico programma che lo usa: c'è anche il DDK.

Ogni tanto mi tocca NOOOOO, CHE TRAGEDIA!!!!! :cry: :cry: :cry:
e sei ancora vivo??? :cry:

usarlo a lavoro per rimettere mano a progetti in VB e oltre all'abominio di linguaggio mi scontro anche con un IDE decisamente fallace. a parte che posso anche essere d'accordo con te sul Visual Basic, a parte che sei piuttosto OT e che non vedo alcun legame col discorso iniziale, ma posso sapere in cosa l'IDE di Visual Basic ti sembra fallace?

tomminno
04-03-2006, 14:51
Tommino: morale che compilatore ide posso usare per scrivere in c e c++ - soprattutto c++ - per windows xp? - non mi interessa la piattaforma .net -

grazie a tutti

Se devi usarlo in ambiente Windows io ti consiglio VisualC++ Express Edition. Il compilatore MS è gratuito e l'IDE è free, anche se non ho capito per quanto tempo.
Il fatto che sia parte del framework .NET non ti obbliga ad usare .NET, rimane pur sempre un compilatore C++.

Ciao!

tomminno
04-03-2006, 14:59
sono settate di default :fagiano:


Dipende dal progetto che crei, io parto sempre da un progetto vuoto e che ricordi le estensioni in questo caso sono disabilitate.


esempio pratico? :mbe:
me lo scrivi tu sto pezzo di codice che non compila? :mbe:
io su Google trovo solo pezzi che compilano... :fagiano:


Un esempio pratico te l'ho già citato, scarica la libreria MYSQL++, prova a compilarla con VC6 e poi sappimi dire.
Ho abbandonato quel compilatore da anni, quindi non saprei dirti con esattezza un codice scritto da me che non compila con VC6, forse se ricompilassi tutto quello che ho fatto in questi anni qualcosa verrebbe fuori.


non credo che ci siano tante differenze nel compilatore della versione 2005... :fagiano:
mica li rifanno da zero eh, sempre del compilatore Microsoft si tratta... e Visual C++ non è l'unico programma che lo usa: c'è anche il DDK.


Se me lo paragoni alla versione 7.1 credo anch'io che non ci siano molte differenze, se invece intendi confrontarlo con la versione 6, allora non sono per niente d'accordo con te e non solo io, a sentire i pareri di chi sicuramente ha più esperienza di me nel campo della programmazione C++.


NOOOOO, CHE TRAGEDIA!!!!! :cry: :cry: :cry:
e sei ancora vivo??? :cry:


Guarda che sei te a sostenere che VC6 sia ancora "validissimo".


a parte che posso anche essere d'accordo con te sul Visual Basic, a parte che sei piuttosto OT e che non vedo alcun legame col discorso iniziale, ma posso sapere in cosa l'IDE di Visual Basic ti sembra fallace?

Terminando subito l'OT il principale problema direi che è quello che se sbagli qualcosa e il programma si pianta, l'IDE lo segue a ruota. Fortunatamente al lavoro per il C++ c'è .NET.

71104
04-03-2006, 21:47
Dipende dal progetto che crei, io parto sempre da un progetto vuoto e che ricordi le estensioni in questo caso sono disabilitate. cioè come fai di preciso? File -> New e quale scegli? se intendi dire che scegli "Win32 Console Application" e poi "Empty Project" allora ti dico subito che sono attivate (appena controllato)...

Un esempio pratico te l'ho già citato, scarica la libreria MYSQL++, prova a compilarla con VC6 e poi sappimi dire. non compila perché dice che manca un file: mysql.h (e infatti non c'è: sfido quell'affare a compilare sul gcc, non penso che mysql.h sia parte della standard library...), ma sintatticamente non rileva errori finché non incappa nell'#include incriminato.

mi puoi pastare il codice del libro di Stroustrup che sono curioso?

Se me lo paragoni alla versione 7.1 credo anch'io che non ci siano molte differenze, se invece intendi confrontarlo con la versione 6, allora non sono per niente d'accordo con te e non solo io, a sentire i pareri di chi sicuramente ha più esperienza di me nel campo della programmazione C++. link?

Guarda che sei te a sostenere che VC6 sia ancora "validissimo".ma non si notava la leggera ironia nelle lacrime? :mbe:

Terminando subito l'OT il principale problema direi che è quello che se sbagli qualcosa e il programma si pianta, l'IDE lo segue a ruota. LOL è vero, :D questa mi mancava :rotfl:
vabbè, è a causa del fatto che è un linguaggio interpretato: se VB fosse dotato di un vero debugger i programmi potrebbero essere compilati prima dell'esecuzione e poi eseguiti stand-alone, come in ogni IDE fatto come Dio comanda. però magari in fondo c'è anche una questione di tradizione: BASIC da sempre è interpretato... (però in effetti potevano anche impegnarsi un attimino con un minimo di multithreading... :mbe: )

tomminno
05-03-2006, 15:10
cioè come fai di preciso? File -> New e quale scegli? se intendi dire che scegli "Win32 Console Application" e poi "Empty Project" allora ti dico subito che sono attivate (appena controllato)...


File->Nuovo->Progetto->Progetto Vuoto.
Se è un progetto console application non è un progetto vuoto.


non compila perché dice che manca un file: mysql.h (e infatti non c'è: sfido quell'affare a compilare sul gcc, non penso che mysql.h sia parte della standard library...), ma sintatticamente non rileva errori finché non incappa nell'#include incriminato.


:doh:
Superficialità a non finire, hai scaricato la libreria e non hai nemmeno letto di cosa si tratta eh!
mysql.h è fornito insieme a MySQL.
Dovresti sapere che se il compilatore trova un errore del genere non continua nella compilazione del codice.


mi puoi pastare il codice del libro di Stroustrup che sono curioso?


Vedo che non ti sei impegnato minimamente a cercare con google. Questo indirizzo l'ho trovato con google nella prima pagina dei risultati cercando "vc6 standard c++":
http://www.medini.org/software/msviscxx/msviscxx.html
Vi trovi anche il codice preso dal libro di Stroustup.


link?


Mi dispiace i colleghi non esprimono le loro esperienze su internet.
Comunque:
http://tangentsoft.net/mysql++/


Will it build under Visual C++ 7.0 or earlier?

No, it won't.

Microsoft didn't get its Standard C++ act together until VC++ 7.1. (a.k.a. Visual Studio 2003)


Poi non è affar mio se ti vuoi ostinare a credere che VC6 sia un compilatore C++ standard.

71104
05-03-2006, 23:54
File->Nuovo->Progetto->Progetto Vuoto.
Se è un progetto console application non è un progetto vuoto. :wtf: da me non c'è

:doh:
Superficialità a non finire, hai scaricato la libreria e non hai nemmeno letto di cosa si tratta eh!
mysql.h è fornito insieme a MySQL.
Dovresti sapere che se il compilatore trova un errore del genere non continua nella compilazione del codice. :mbe:
allora: io voglio installare questa libreria; l'ho scaricata; l'ho decompressa; che faccio?

Vedo che non ti sei impegnato minimamente a cercare con google. se manco so cosa cercare...

Questo indirizzo l'ho trovato con google nella prima pagina dei risultati cercando "vc6 standard c++": sinceramente cercando quelle parole io non mi sarei aspettato di trovare il pezzo di codice di Stroustrup che non compila.

http://www.medini.org/software/msviscxx/msviscxx.html
Vi trovi anche il codice preso dal libro di Stroustup. per il primo mi piacerebbe tanto sapere chi ha ragione; la seconda versione del primo compila perfettamente; nel secondo l'idiozia non è del compilatore ma di chi scriverebbe una cosa simile; il terzo non l'ho capito :fagiano:; nel quarto stesso discorso del secondo (chissà chi ha ragione: mi piacerebbe tanto saperlo, ma senza reference ufficiale non lo può dire nemmeno Stroustrup); il quinto non capisco come possa essere giusto: manca la dichiarazione di quella funzione... :wtf:; il sesto non è da imputare a Microsoft: se proprio quella cosa non ti va bene fai un bug report, qualunque programmatore umano commette errori; stesso discorso per il settimo (e poi questi ultimi due non sono neanche codice valido); l'ottavo non capisco come mai sia giusto, a me sembra sintatticamente errato... (idem per il nono).

Mi dispiace i colleghi non esprimono le loro esperienze su internet. quindi non puoi basarci una discussione ufficiale perché anche io posso inventarmi quello che mi pare giustificandolo con l'autorità di questi miei fantomatici colleghi.

Comunque:
http://tangentsoft.net/mysql++/ mi vuoi dire che dalla versione 7.0 alla 7.1 ci sono enormi differenze solo perché una libreria compila sulla seconda versione? le differenze tra quelle due versioni saranno anche più evidenti rispetto a quelle tra versioni precedenti o successive, ma il compilatore sempre quello è e per quello che possiamo ipotizzare di certo non è stato rifatto da zero; poi siccome questo punto del discorso si avvicina parecchio alla sessione onanista mentale aggiungo che il fatto che nested templates causino internal error non è un buon motivo per preferire Visual Studio dotNET alla versione 6: quest'ultima è ancora oggi usatissima (apri i newsgroup su it.comp.programmare.win32: non c'è nessuno lì dentro che non lo usi) perché per la programmazione Win32 è il massimo: nessun altro IDE che io sappia ha una simile integrazione con MFC e ATL (usatissimi assieme a Win32), nessun altro IDE ha integrato un editor di risorse di simile qualità, e il compilatore sempre ottimo rimane (senza contare che volendo lo si può sostituire col compilatore Intel, come ho fatto io tempo fa, anche se poi sono tornato a quello Microsoft per motivi che non c'entrano niente).

Poi non è affar mio se ti vuoi ostinare a credere che VC6 sia un compilatore C++ standard. non lo credo, ma non m'importa perché non è un'argomentazione significativa ai fini della mia produttività. e poi parli come se Microsoft si discostasse anni luce dallo standard, suvvia, quegli esempi di codice sono pippe mentali che non scriverebbe mai nessuno trane qualche maniaco del MySQL... chissà quante altre librerie esistono per comunicare con un database MySQL... mi pare perfettamente normale che Microsoft abbia scelto di non preoccuparsi di quei problemi fino a tempi relativamente recenti.