Domanda

Ho un prodotto commerciale che è una DLL (nativo codice a 32 bit), e ora è il momento di costruire una versione a 64 bit di esso. Così, durante l'installazione su Windows a 64 bit, la versione a 32 bit va in Windows \ SysWOW64, e la versione a 64 bit va in ... Windows \ System32! (Sto mordendo la lingua qui ...) O il DLL (s) può essere installato a fianco l'applicazione client.

Cosa devo chiamare la DLL a 64 bit?

Lo stesso nome come a 32 bit: due file che fanno la stessa cosa, hanno lo stesso nome, ma sono totalmente non intercambiabili. Non è una ricetta per problemi di confusione e di supporto?

nomi diversi (ad esempio product.dll e product64.dll): le applicazioni client devono ora sapere se sono in esecuzione a 32-bit o 64-bit al fine di riferimento mia DLL, e ci sono lingue in cui che non è noto fino run-time - NET di essere solo un esempio. Ed ora tutti i client compilati staticamente devono condizionare le dichiarazioni di importazione: IF target = Win64 quindi importare Blah da "product64.dll" Blah importazione ELSE da "product.dll" ENDIF

Il prodotto contiene enormi quantità di codice C, e un grosso pezzo di C ++ -. Porting in C # non è un'opzione

Consigli? Suggerimenti?

È stato utile?

Soluzione 3

Ho deciso di seguire Microsoft su questo, che hanno mantenuto gli stessi nomi per le DLL in System32 quando sono andati a 64 bit. Su Win7 / 64, System32 \ avicap32.dll è una DLL a 64 bit!

V'è una certa potenziale confusione per me ei miei clienti, avendo a 32-bit e 64-bit DLL con lo stesso nome. Tuttavia penso che sarebbe peggio di avere tutti i miei clienti devono fare la loro parola in codice larghezza sensibili. Soprattutto gli sviluppatori .NET, che spesso possono lasciare il loro obiettivo fissato piattaforma per 'AnyCPU'.

Altri suggerimenti

Le applicazioni client non deve "sapere" che sono a 32 bit o 64 bit. Il sistema operativo carica automaticamente DLL dalla posizione appropriata poiché non è possibile caricare una DLL a 32 bit in un processo a 64 bit, e non è possibile caricare una DLL a 64 bit in un processo a 32 bit.

Se un'applicazione a 32 bit di cerca di di carico qualcosa dal system32, il sistema operativo in silenzio reindirizzare alla directory SysWow64, costringendo la versione a 32 bit per il carico.

Per avere nomi diversi, a sconfiggere l'intero meccanismo. Un meccanismo costruito appositamente per consentire di utilizzare lo stesso nome.

Perché non anteporre al dll con un underscore ... come product_32.dll e product_64.dll ? O indicato questo utilizzando un prefisso piattaforma - product_x86_32.dll e product_x86_64.dll ? Almeno questo sarà chiaro la confusione della denominazione della DLL ... Cosa ne pensi?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top