2014-06-25 8 views
6

Sto per distribuire una versione a 64 bit di un OCX scritto in Delphi. L'OCX richiede stdvcl40.dll per essere disponibile e registrato nel sistema di destinazione. Per quanto ne so, c'è una versione a 32 bit presente nell'installazione di Delphi, ma dato che le fonti sono disponibili dovrei essere in grado di creare da solo una versione a 64 bit.Ho bisogno di una versione a 64 bit di stdvcl40.dll?

Esiste una necessità o un vantaggio in tal senso oppure devo attenermi alla versione contenuta e distribuirla solo in quella?

Modifica solo per dare un po 'di storia: StdVCL40.dll contiene principalmente una libreria dei tipi di esporre tre interfacce dichiarati nel System.Win.StdVCL.pas. Versioni successive di questa DLL implementano anche alcune pagine di proprietà che gestiscono queste interfacce.

Il risultato della rimozione della dipendenza da stdvcl40.dll è che queste interfacce (IStrings nel mio caso) non sono più disponibili nella libreria dei tipi e qualsiasi riferimento viene sostituito con IDispatch.

stdvcl40.dll non è un pacchetto in fase di progettazione e doveva essere distribuito insieme alla maggior parte delle mie librerie ActiveX nelle precedenti versioni di Delphi. Devo distribuirlo perché altrimenti l'OCX si rifiuta di registrarsi in primo luogo.

In realtà sembra funzionare anche con la versione a 64 bit del mio OCX probabilmente perché Windows COM è abbastanza intelligente da capire che non esiste una versione a 64 bit e quindi accetta la versione a 32 bit. Anche se non sono sicuro se questa è la strada da percorrere. Quindi la mia domanda.

+0

StdVclXX.dll è una DLL ridistribuibile elencata nella guida di distribuzione per le versioni precedenti di Delphi. Ma per quanto posso dire, non è più necessario nella moderna Delphi. La guida alla distribuzione non la elenca più. –

+0

@DavidHeffernan, in pratica definisce solo alcune interfacce (IStrings, IProvider, IDataBroker) in cui attualmente utilizzo IStrings. Ciò che mi infastidisce è che viene automaticamente incluso quando si crea una nuova libreria ActiveX, anche in XE6. –

+0

Forse è solo storico e hanno dimenticato di rimuoverlo dal nuovo modello di progetto. Hai provato a rimuovere qualsiasi riferimento a stdvclxx dal progetto? –

risposta

2

Suppongo che questa DLL sia utilizzata come memoria solo per la libreria di tipi (con definizione di IStrings ecc.), Almeno nel tuo caso. E poi la risposta è "NO", non hai bisogno della versione x64. Quando registri questa DLL x32, la libreria dei tipi dovrebbe essere disponibile per entrambe le app x32/x64. Scusa, non posso controllarlo ora, quindi è solo una supposizione.

AGGIORNAMENTO È possibile registrare stdvcl40.tlb (si tratta solo di 3kb in termini di dimensioni, quindi è molto più facile da implementare), allora il vostro OCX dipenderà "stdvcl40.tlb" invece di "stdvcl40.dll" (forse sarà necessario deselezionare DLL e controllare TLB dalla scheda "Usi" dell'editor della libreria dei tipi, ma non sono sicuro che sia necessario, ma nel mio progetto di test non ho più dipendenza dalla DLL).

+0

Perché dovrebbe essere disponibile per entrambe le app x86 e x64? Hanno registri separati. –

+0

@David Penso che non ci siano librerie di tipi x32/x64, perché non è eseguibile. La DLL stessa verrà registrata come x32, ma registrerà la libreria di tipi integrati e credo che sia diventata disponibile per qualsiasi applicazione (x32/x64) nel sistema. Ho aggiornato la mia risposta con un commento su come evitare la dipendenza da stdvcl40.dll. –

+0

@Se hai provato a distribuire la versione a 32 bit e registrarla. Forse Andrei ha ragione. Anche se non sono abbastanza sicuro di come un'applicazione a 64 bit vede il registro di com di un componente a 32 bit. Ma forse succede. –

Problemi correlati