Newsgroup: it.comp.lang.visual-basic
Titolo: Enumerazioni come parametri di Property

Forse mi sfugge qualcosa....
In un classe (public Multiuse) ho le seguenti dichiarazioni:
Public Property Get DBProperty(Prop As EConfigDBProp) As Variant
...
End Property
Public Property Let DBProperty(Prop As EConfigDBProp, Value As
Variant)
...
End Property
L'enumerazione EConfigDBProp è dichiarata all'interno di una mia
TypeLibrary.
Quando compilo mi scappa:
"Le definizioni delle routine Property per la stessa proprietà non
sono coerenti o includono parametri facoltativi o ParamArray"
La causa credo che stia nel fatto che l'enumerazione non è dichiarata
all'interno del progetto...c'è una soluzione?
Tnx.
Daniele.


Ho provato la stessa cosa ma non ho avuto problemi.
Inizialmente avevo pensato a dover esplicitare byval/byref ma ho visto che non
conta.
Prova a postare il codice della TLB.
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.


Mmm..la cosa mi consola...magari ho sbagliato qualcosa...
La TLib è solamente un insieme di Costanti e qualche UDT.
Ti riporto solo un pezzo (il resto è pressochè identico..)
library EuroSvcLib
{
	// TypeLib di definizione API Win32 UNICODE
	//importlib("winU.tlb");
	[dllname("bogus_Config")]
	module ConfigService
	{
		typedef  enum
		{
			DB_PATH_CAPS,
			DB_PATH_ANAGRAFICHE,
			DB_PATH_STORICI,
			DB_PATH_GPS,
			DB_PATH_UPG,
			DB_PWD,
			DB_USER,
			DB_SERVER_NAME,
			DB_SERVER_PORT,
			DB_ENABLE_AUTO_BACKUP,
			DB_PATH_BACKUP,
			DB_LAST_BACKUP_DATE,
			DB_ENABLE_BKP_COMPRESSION,
			DB_CACHE_INTERVAL
		}EConfigDBProp;
	}
}
L'ho compilata con le opzioni /win32 /mktyplib203
Daniele.

 Daniele.
Compilandola senza nessuna opzione a me funziona. Cioč con questa linea di
comando:
C:\Programmi\Microsoft Visual Studio\VC98\Bin\MIDL.EXE <tualib.idl>
Ciao

 C:\Programmi\Microsoft Visual Studio\VC98\Bin\MIDL.EXE <tualib.idl>
Adesso provo....
L'ho compilata in modalità compatibile (/mktyplib203), perchè nel modo
tradizionale il compilatore crea automaticamente degli alias per le
enumerazioni e la dichiarazione di prima diventa (con OLE Viewer):
    typedef [public]
    __MIDL_ConfigService_0013 EConfigDBProp;
    typedef enum {
        DB_PATH_CAPS = 0,
        DB_PATH_ANAGRAFICHE = 1,
        DB_PATH_STORICI = 2,
        DB_PATH_GPS = 3,
        DB_PATH_UPG = 4,
        DB_PWD = 5,
        DB_USER = 6,
        DB_SERVER_NAME = 7,
        DB_SERVER_PORT = 8,
        DB_ENABLE_AUTO_BACKUP = 9,
        DB_PATH_BACKUP = 10,
        DB_LAST_BACKUP_DATE = 11,
        DB_ENABLE_BKP_COMPRESSION = 12,
        DB_CACHE_INTERVAL = 13
    } __MIDL_ConfigService_0013;
E non ho trovato il modo di evitarlo!
Nel visualizzatore oggetti, se si mostrano i membri nascosti, vengono
visualizzati tutti gli alias.
Ho provato ad usare l'opzione '/U __MIDL' ma non sortisce alcun
effetto...
Hai indicazioni in merito?
Tnx.
Daniele.

 effetto...
Comunque anche con
C:\Programmi\Microsoft Visual Studio\VC98\Bin\MIDL.EXE <tualib.idl> /mktyplib203
non ho avuto nessun problema!
Sospetto a questo punto che sia la tua versione di MIDL... (io ho la 5.01.0164)


 Sospetto a questo punto che sia la tua versione di MIDL... (io ho la 5.01.0164)
Mah!
Io ho la 5.0.1802.1 del 09/06/98

 Io ho la 5.0.1802.1 del 09/06/98
Nemmeno così mi funziona! Porc'!
Ti viene male provare ad inviarmi il compilatore?
Tnx!
Daniele.

 Io ho la 5.0.1802.1 del 09/06/98
Č la stessa che ho io (cioč nelle versioninfo c'č quel numero di versione,
mentre quando lo si avvia in console esce il numero che ho riportato io).
Faccio eco: BOOOH?!?


 Ti viene male provare ad inviarmi il compilatore?
Come ti ho detto ho la stessa tua versione.
Piuttosto, prova tu a mandarmi la tua TLB, se non ti dispiace.


 Piuttosto, prova tu a mandarmi la tua TLB, se non ti dispiace.
Ho scaricato l'ultimo Platform SDK che contiene la versione 6 del
compilatore...ma nada.
Quindi forse è proprio il sorgente della TBL.
Adesso faccio due prove e poi magari te la mando.
Ma..una roba... te alle enumerazioni assegni un GUID?
Bye.
Daniele.


Solitamente sì, ma in questo caso ho copiato pari pari il tuo codice, quindi
nessun GUID.
Ciao

 nessun GUID.
Dunque...non chiedermi perchè, cmq...
Ho assegnato una UUID all'enumerazione (quella che ti ho spedito anche
per posta) ed ora funziona!
Non so perchè da te funziona anche senza!
Cmq potrebbe avere una sua logica: senza un UUID forse l'enumerazione
'rimane privata' e quindi...
Adesso provo a modificare la TLB del progetto!
Bye.
Daniele.

 'rimane privata' e quindi...
Piů che altro forse VB non riesce a capire che "tipo" č e si incasina...
Ciao



L'ho ricevuta ora!
Premetto: mi sa che ho sempre preso un granchio...
Difatti per provare ho sempre fatto "Avvia con compilazione completa" e questo
non mi dava errore nemmeno con la tua.
Mentre tentando di *compilare* la DLL, ecco che gli errori saltano fuori sia con
la mia che con la tua!
Credevo che per VB fosse la stessa cosa, invece evidentemente cosě non č.
Sono impazzito parecchio anch'io ma sembrava che non ci fosse verso... provavo
con Enum definiti in Type Libraries di miei progetti anche consolidati ma era la
stessa cosa!
In effetti nei miei casi gli enum definiti in TLB erano usati in implementazioni
di interfacce definite nella stessa typelib. In quello specifico caso non ho mai
avuto problemi.
Alla fine perň, usando /mktyplib203 (che io come ti dicevo non usavo) e gli UUID
per l'enum, ce l'ho fatta!!!


 per l'enum, ce l'ho fatta!!!
Infatti il problema non è tanto nell'opzione /mktyplib203, che viene
utilizzato solo per compatibilità con la vecchia sintassi ODL, tanto
nel fatto che non usavo gli UUID.
Adesso ne ho assegnato uno ad ogni enumerazione e il tutto funzia!
Grazie per l'aiuto!
Bye.
Daniele.

 Daniele.
Figurati, è stato utile anche per me.
Bye
