Newsgroup: it.comp.lang.c++
Titolo: Problema con Dll

Ho un problema:
ho una funzione perfettamente funzionante in un progetto di Win32 Console
Application e vorrei implementarla in una dll. Provo ad inserirla ma mi dà
continuamente errore. Devo cambiare qualcosa?
Grazie Raf

...


...


Cosi' ad occhio credo tu abbia dimenticato di inserire i giusti #include in
testa al file.


testa al file.
ciao! 
io e raf stiamo lavorando in 2 alla stessa cosa, sono riuscito a
eliminare tutti gli errori tranne 3 spostando le dichiarazioni delle
variabili in cima alla funzione (perche'? le dll vanno come il c?) ma
mi restano 3 errori causati dalla solita riga con cui lotto da 3
giorni: 
pb = reinterpret_cast<BYTE*>(malloc(dwDim));
mi dice: 
error C2065: 'reinterpret_cast' : undeclared identifier
error C2275: 'BYTE' : illegal use of this type as an expression
error C2059: syntax error : '>'
qualche idea?
grazie a tutti
Francesco Mapelli ( 
mape...@tin.it
 )
il contakm per il mouse:
http://members.xoom.com/mousestats
sito comune programmatori vb
http://members.xoom.com/it_lang_vb

variabili in cima alla funzione (perche'? le dll vanno come il c?) ma
Le DLL c'entrano circa quanto l'ultimo risultato (fuori casa)
dell'Ulan Bator nel campionato nazionale di bocce della
Mongolia, il C, invece, c'entra parecchio, visto che avete
appunto scelto di usare il C per il sorgente in questione (tu
qui non lo riporti, ma il tuo amico ha citato i messaggi interi,
e in essi il nome del sorgente e` chiaramente identificato
come "dll.c" -- nota bene, PUNTO C, *NON* PUNTO CPP...).
Alex

...
    [snip]
La funzione e` in C++, il sorgente in cui la stai compilando
invece si chiama dll.c, quindi, ovviamente, non riconosce
i costrutti C++!  Ad esempio bool, reinterpret_cast, ecc,
tutte parole-chiave C++, sconosciute al C.
Hai due scelte: riscrivi tutto in C, oppure metti questa
funzione in un sorgente qualcosa.cpp (puoi avere piu`
file sorgenti anche in una DLL, esattamente come in
qualsiasi altro programma); se devi chiamarla da C,
ricordati di dichiararla extern "C" (nell'header file nel
quale naturalmente dovrai avere la dichiarazione,
header che includerai sia nel sorgente C, sia in
quello C++).
Alex

variabili in cima alla funzione (perche'? le dll vanno come il c?) ma


causato dalla mancanza del giusto include
Gli include non c'entrano: reinterpret_cast e` una parola
riservata (keyword) del linguaggio C++.
Alex

Ciao Alex,
effettivamente mi era sfuggita l'estensione del file che e' .C e non .CPP,
nella prova che ho fatto, usavo proprio l'ultima.
Sigh..
ciao, Franco.
Franco Torrini - Software Engineer - 
f.to...@virtuart.it
VIRTUART - C.C.D. Creative Computer Design S.p.A.
Via di Quarto Annunziata, 80/b - 00189 Rome, Italy
Tel. 
+39 06 33076638
 - Fax. 
+39 06 33076670
Web: 
http://www.virtuart.it
Alex Martelli wrote in message ...


quello C++).
non ho capito il pezzo qui sopra...... faccio un altro file cpp dove
metto la mia funzioncina, poi in un h devo dichiararla e devo mettere 
#include "il_mio_header.h" sia in quello in c che in quello in cpp?
mmhh.... io ho provato a fare cosi': ho preso tutto, ho rinominato con
estensione cpp, ho fatto un nuovo progetto ed e' andato tutto a posto,
solo che ora mi da degli errori quando provo a lanciare la dll!
nessuno mi sa dire come posso scrivere la mia funzioncina in c? ve la
rimetto qui, casomai l'aveste persa.
bool ActiveConnection()
{
TCHAR tszKey[] =
_T("System\\CurrentControlSet\\Services\\RemoteAccess");
HKEY hKey;
DWORD dwDim;
BYTE  *pb;
PULONG pippo=0;
//BYTE *pc; 
long res ;
RegOpenKeyEx( 
	HKEY_LOCAL_MACHINE,
	tszKey,
	0,
	KEY_ALL_ACCESS,
	&hKey
	);
RegQueryValueEx(
	hKey,
	_T("Remote Connection"),
	NULL,
	pippo,
	NULL,
	&dwDim
);
pb=reinterpret_cast<BYTE*>(malloc(dwDim)); 
//credo che il problema sia questa riga sopra


nessuno mi sa dire come posso scrivere la mia funzioncina in c? ve la
A occhio hai solo due usi del C++ in questo codice: usi bool, che
in C non esiste (puoi provare a sostituirlo con int, o BOOL visto
che sei in ambiente Win32 dove BOOL e` definito negli header
file di sistema), e reinterpret_cast idem; non ho esaminato con
precisione quale reinterpret_cast tu faccia, comunque, molti sono
sostituibili dai "cast vecchio stile" del C.
In generale, secondo me, sarebbe pero` preferibile usare il C++,
che ti da` varie comodita` (le due teste` menzionate, quella di
potere dichiarare le cose solo dove servono, ecc); non capisco
perche` non vuoi dichiarare extern "C" quegli entry point che,
appunto, devi far vedere "come se" fossero implementati in C.
Alex

Alex
Ciao Alex,
Purtroppo siamo costretti ad usare il C e non il C++.
Sapreste indicarmi il codice (in C) da usare invece di quel £$%/**" di
Reinterpret_Cast.?
Pregando di scusarmi per l'ignoranza di C,
ringrazio chi vorrà rispondermi.
Raffaele Cannizzaro (kanni)
kzzzazzz...@tin.it
(levare tutte le z)

Reinterpret_Cast.?
Al posto di "reinterpret_cast<tipo>(espressione)", potrai
scrivere "(tipo)(espressione)", e al 90% sara` equivalente
(il restante 10% sono cast fra int e float, fra puntatori a
tipi derivati l'uno dall'altro, ecc, che richiedono trucchi vari
per essere simulati senza reinterpret_cast).
Alex