2013-07-06 17 views
11

ho una libreria di 32 com e vorrebbe utilizzare le sue funzionalità da un'applicazione a 64 bit, 'ho cercato su internet e sono riuscito a ottenere questo workaroundutilizzando com libreria 32 bit su 64 bit delle applicazioni

  1. Individua il tuo GUID dell'oggetto COM sotto HKey_Classes_Root\Wow6432Node\CLSID\[GUID]
  2. Una volta individuato aggiungi un nuovo valore REG_SZ (string). Nome dovrebbe essere AppID e dati dovrebbe essere lo stesso GUID oggetto COM che avete appena cercato
  3. aggiungere una nuova chiave sotto HKey_Classes_Root\Wow6432Node\AppID\
  4. La nuova chiave dovrebbe essere chiamato lo stesso come l'oggetto COM GUID
  5. Sotto la nuova chiave hai appena aggiunto, aggiungi un nuovo valore REG_SZ (string) e chiamalo DllSurrogate. Lasciare il valore vuoto
  6. creare una nuova chiave sotto HKey_Local_Machine\Software\Classes\AppID\

ma non funziona su Windows 7 a 64 bit, il problema principale è quando faccio il punto 6 ho trovato la chiave già esisteva, qualsiasi corpo sa perché? o come posso superarlo?

la documentazione qui è molto breve

+1

Il passaggio 3 dovrebbe creare la chiave visibile per i programmi a 32 bit. Il nome chiave più accurato è HKLM \ Software \ Wow6432Node \ Classes \ AppID. Il passaggio 6 dovrebbe creare la chiave visibile per i programmi a 64 bit, stesso percorso meno la parte "Wow6432Node".Qualcosa di molto sbagliato con la tua macchina se la chiave che hai creato nel passaggio 3 è visibile nel percorso del passaggio 6. Non saltare la parte Wow6432Node. –

+0

secondo voi il problema può esistere perché ho usato o usato regedit a 32 bit o 64 bit? il problema può essere che ho registrato la libreria con 32 o 64 regsrv32.exe? –

+1

Hai pensato di ricostruire la libreria come 64? (Oppure, suppongo che una domanda migliore sarebbe, avete accesso alla sorgente della libreria?) –

risposta

0

Potrebbe essere causato da registry virtualization. Ive ha avuto problemi come questo in passato. Il più grande fastidio è che non riesci a vedere i valori o le chiavi che l'editor si lamenta già esistono. Esistono in realtà in una parte diversa del registro (probabilmente l'hive degli utenti).

Buona fortuna

0

64 bit eseguibile non può chiamare una DLL a 32 bit (e viceversa). È necessario compilare l'applicazione a 64 bit come 32 bit. In questo modo sarai in grado di utilizzare la DLL ed eseguire tutto ciò su sistemi operativi a 32-bit e 64-bit.

0

Registro è solo un modo adeguato per individuare la DLL richiesta.

Se si conosce il percorso alla DLL a 32 bit su ogni sistema o si può passare con la vostra applicazione, e controllare il codice del vostro 64bit app, quindi è possibile utilizzare tecniche seguenti: 1) meccanismo SxS + manifesta permettono di carico dll da una cartella locale senza registring e creare componenti COM da essa 2) effettuare questa operazione manualmente http://www.codeproject.com/Articles/18433/Emulating-CoCreateInstance

La seconda soluzione è molto più semplice ...

1

Allora, che cosa dovete fare qui è avvia questo componente COM a 32 bit nel proprio processo, ovvero chiamando CoCreateInstance con CLSCTX_LOCAL_SERVER.

O questo sarà semplice con la DLL esistente, o se non si deve andare a capo con la vostra semplice componente COM a 32 bit che supporta l'esecuzione come un server locale ...

Cercando di modificare il Registro di sistema è un gioco senza vincita - usa la Dll come previsto e risparmia il dolore.

Problemi correlati