Quindi sto lavorando su un progetto Excel che sta per caricare una DLL C++ utilizzando VBA. Quello che mi piacerebbe fare è essere in grado di passare un intervallo di Excel senza un tipo specifico (i dati possono essere numerici o categoriali) alla DLL C++ (il modo migliore in cui posso descrivere il mio intervallo di Excel è del tipo variant
).Passare dati di tipo arbitrario tra VBA e dll
Così i passaggi probabilmente coinvolgono:
- caricare la DLL in VBA
- Invia la gamma di Excel per DLL (La gamma può contenere colonne di numeri e/o colonne di stringhe)
- manipolare il dati da excel nel file dll
Sto pensando di utilizzare la variante excel e la variante C++. Ma non è chiaro per me come usare la variante C++ in quanto non sono riuscito a trovare alcuna buona documentazione su di esso.
Un altro suggerimento che ho ricevuto è stata la programmazione COM.
Le mie domande:
- potrebbe un animo gentile, eventualmente, fornire indicazioni per me su come procedere? (ad esempio fornendo il prototipo C++ e un semplice esempio di come gestire la variante)
- Qualcuno conosce una buona documentazione/esercitazione sull'utilizzo di Varianti C++ (e forse in collaborazione con VBA)?
- L'utilizzo di COM è preferibile all'utilizzo di VARIANTI se la velocità è un problema?
- Si sta utilizzando l'API C un'opzione?
UPDATE:
- La dimensione delle gamme ho bisogno di manipolare può essere di grandi dimensioni (~ 500.000 righe).
- La velocità è un fattore, quindi, vorrei evitare di copiare inutilmente il più possibile.
Grazie! Se non sbaglio, scrivere il TLB coinvolge la programmazione COM, giusto? E allora ciò limita la portabilità dell'applicazione (in particolare sulle macchine Linux)? – SMir
@SMir No, non implica la programmazione COM di per sé. Si scrive TLB solo per consentire a VB di comprendere la firma della funzione C++. Oltre a ciò, la funzione è una semplice funzione esportata in stile classico non COM. – GSerg
Grazie per la pronta risposta. L'utilizzo di 'Variant' mi consente di passare tipi misti alla DLL? Oppure consente solo di avere un singolo tipo (che si tratti di stringhe o numeri, ecc.). – SMir