|
Q
& A
|
Questo
spazio è dedicato alla risoluzione dei vostri problemi di
programmazione. Proponete domande tecniche ed otterete risposte
pratiche ed esaustive ai vostri questi.
q&a@infomedia.it |
VC++ e VB
in comunicazione
Dino,
ho letto il tuo articolo "Visual C++ DLLs Need a DEF File for VB
Clients" sul sito VB2theMAX. Personalmente ho a che fare col caso
contrario: Chiamare funzioni dentro una DLL Visual Basic (v.6) da una
applicazione Visual C++ (v.4.2).
Non ho esperienza con il C++ ma ho usato il C++ su HP/UX alcuni anni fa.
Mi sto domandando se tu potessi dividere le tue conoscenze con me
fornendomi alcune indicazioni su come collegarmi alla DLL e fare
riferimento alle funzioni della DLL. Ogni precisazione sarà molto
apprezzata.
Tanti saluti
Jesus Delgado
Risponde Dino
Esposito
Non lo puoi fare per un semplice motivo. VB non può
esporre funzioni pubbliche richiamabili esternamente. Puoi solo esporre
funzionalità tramite COM. Nel qual caso chiamarle da VC++ è facile
come chiamare un qualunque altro oggetto COM automation.
Masterizzatore
che passione
Salve, ho la necessità di riconoscere (via software)
un masterizzatore da un CD-ROM; spulciando le varie API ho trovato la
funzione GetDriveType() con la quale riesco solo a sapere se è un
CD-ROM e, purtroppo anche i masterizzatori vengono riconosciuti come
tali.
Come posso distinguere i due tipi di device?
Grazie in anticipo
Gianni Luciani
Risponde Davide
Quack
I masterizzatori non sono mai stati in realtà
supportati molto da Windows.
È solo con win2000 che è comparso nell'SDK la sezione: "Removable
Storage Manager", e con essa l'API che fa per lei:
GetNtmsObjectInformation().
Se non puo limitarsi ad usare win2000 per risolvere i suoi problemi le
consiglio di fare un salto su http://sourceforge.net/.
Da questo sito ho scaricato tempo fa, per curiosità, il codice sorgente
di un software Open Source per masterizzatori. Sono certo che tra le
righe di quei sorgenti troverà quanto le serve.
Saluti
Il modo
migliore
Pur usando ASP da diverso tempo non sono ancora
riuscito a capire chiaramente qual’è il modo migliore per creare
istanze di oggetti COM in una pagina ASP. Pur non sapendo bene perché,
al momento uso sempre Server.CreateObject. Dovrei cambiare?
Luca Masini
Risponde Dino
Esposito
In realtà non esistono particolari differenze tra il
metodo CreateObject diretto di VBScript (o il suo equivalente JScript) e
l'omonimo metodo dell'oggetto Server di ASP. In molti casi, anzi, usare
uno o l'altro è assolutamente indifferente. Vi sono solo alcune
circostanze da tenere presente e solo un caso in cui Server.CreateObject
fa la differenza.
Innanzitutto, il motore di scripting di VBScript è leggermente e
mediamente più veloce di quello di JScript, almeno per quanto riguarda
la creazione di oggetti. Non si tratta di differenze abissali
intendiamoci ma tutto può fare brodo quando si tratta di server.
L'unica cosa che Server.CreateObject fa in più rispetto alla più
semplice CreateObject è mettere l'oggetto in condizione di effettuare
chiamate agli oggetti nativi ASP quali Response e Request. In altre
parole, se dovete creare un'istanza di ADO non vi è differenza alcuna.
Se dovete creare un'istanza di un oggetto che internamente usa gli
oggetti ASP allora è obbligatorio usare Server.CreateObject.
Un'altra considerazione interessante è che dichiarare un oggetto
tramite il tag <OBJECT> offre una performance leggermente migliore
non tanto in velocità quanto nell'uso della memoria. Un oggetto
dichiarato come <OBJECT> infatti viene istanziato da ASP solo nel
momento in cui viene effettivamente utilizzato. Mentre potete mettere in
cima alla pagina una serie di tag <OBJECT> senza problemi,
sappiate che una analoga serie di chiamate a Server.CreateObject oppure
CreateObject creerebbe una lunga serie di oggetti COM attivi con
conseguente occupazione non ottimale di memoria.
Come
modificare le risorse di un programma eseguibile?
Spettabile Infomedia programmo in C++Builder da
diverso tempo e vorrei sapere come è possibile modificare le icone
contenute in un file eseguibile per Windows.NB: so come prelevarle
(tramite la funzione di sistema ExtractIcon...), ma la documentazione
MSDN non fornisce nulla circa il modo di risalvarle nel file una volta
modificate.
Grazie
Stefano Antonucci
Risponde Davide
Quack
Probabilmente MSDN non parla dell'API per salvare
risorse modificate per il semplice motivo che l'API in questione non
c'è.Naturalmente la cosa si può fare. Il prezzo è studiarsi il
formato PE degli eseguibili, e il formato delle risorse. Può anche
prendersi i sorgenti del compilatore Open Source MinGW, visto che in
mezzo c'è anche un compilatore di risorse. Si può fare, ma sospetto
con molto lavoro faticoso insomma.
Saluti
Installazione
OCX
Buona giornata,
spero di non essere la sola ad avere questo problema.
La mia applicazione gira in locale ed è costituita da un gruppo di Ocx
e da una Dll; le Ocx vengono visualizzate su pagine Asp con l'ausilio di
PWS o IIS e gli accessi a MSDE sono tutti concentrati nella Dll.
Quando rilascio una nuova versione creo un Cab internet del gruppo di
Ocx, aggiungendo la Dll; il risultato è il file X.Cab e la pagina X.Htm.
Fino a qua tutto bene, creo uno zip autoscompattante e lo rilascio; se
scompatto lo Zip e richiamo la pagina X.htm l'installazione va a buon
fine a patto che sia aperta una connessione ad internet (in c:\windir\Downloaded
Program Files\. mi ritrovo l'Ocx scaricata).
Se scompatto il file Zip e chiamo la pagina X.htm con la connessione
chiusa non succede nulla; il PWS sta funzionando correttamente, la
pagina la chiamo da http:/localhost/X.htm.
C'è qualcosa che devo sapere a proposito di configurazioni di IE,
service pack, directory di installazione?
Grazie.
Valentina Frizzon
Risponde Andrea
Chiarelli
Ciao Valentina,
dallo scenario che hai descritto credo di poterti dare qualche
suggerimento di una possibile causa del comportamento apparentemente
anomalo del download automatico. Nel tuo messaggio non hai indicato
l'ambiente di sviluppo che hai utilizzato per sviluppare gli OCX, per
cui assumo che abbia utilizzato un componente della famiglia Visual
Studio per lo sviluppo e il Package & Deployment Wizard per la
creazione del cabinet. In uno dei passi del wizard viene richiesto se il
runtime eventualmente necessario per l'esecuzione del controllo deve
essere scaricato dal sito Web della Microsoft (opzione predefinita).
Se hai lasciato l'impostazione predefinita, IE cercherà di connettersi
al sito della Microsoft anche solo per verificare l'esistenza di una
versione aggiornata del runtime. Se non è disponibile una connessione
al sito Microsoft il processo di download non può proseguire.
Perché il download possa essere effettuato in locale o in una Intranet,
senza quindi tenere attiva una connessione ad Internet, elimina il
riferimento al sito Microsoft per l'eventuale runtime nella fase di
creazione del cabinet.
Spero che questa indicazione risolva il problema che hai descritto.
Problema
nell'inserimento di un oggetto in un file RTF
Buongiorno,
le sottopongo un problema di cui ovviamente non ho ancora trovato una
risoluzione.
Ho un architettura di tipo documento vista, dove la vista è
CrichEditView e desidero con questa visualizzare un file di tipo .rtf e
poter in esso inserire varie immagini .bmp.
Per inserire un immagine è fornita la funzione CRichEditView::InsertFileAsObject
che però occupa della memoria e non la libera di nuovo fino a quando la
vista non viene chiusa. Ho cercato quindi di sostituire questa funzione
prendendo un esempio riportato nel Msdn al "ID:Q220844",ma
nulla da fare qualunque sia la combinazione che adotto c'è sempre
memoria che viene allocata e non disallocata.
Aspettando una risposta.
Daniela Squarise
Risponde Davide
Quack
Non uso le MFC da tanto tempo perché sono
dell'opinione che il modo più veloce di risolvere i problemi è non
averli affatto. Nel suo caso tra MFC, OLE e il più che famigerato
controllo rich edit che ci sta sotto, mi meraviglio che non si sia
formattato il suo PC.
Anche se risolve in modo ortodosso il suo problema, le rimarrà sempre
quello delle versioni di questo controllo. Tenga conto che conosco più
di una persona che si installa su win2000 la DLL di sistema con il rich
edit di win98 perché la vecchia versione funziona meglio.
Le consiglio di aggirare il problema creando un nuovo controllo static,
o una nuova finestra, mettendolo sopra il controllo rich edit, e
disegnandoci dentro la sua figura. Dentro il controllo rich edit può
metterci un semplice rettangolo nero, appunto come segna posto. Il
codice in C/C++.
Prima però di valutare questa strada drastico, vorrei consigliarle di
dare un'occhiata agli esempi dell'SDK in C. Spesso la qualità del
codice è molto meglio di quella che può trovare sul MSDN.
Saluti
|