Esecuzione di applicazione a 32 bit con 32 bit com su una macchina Windows a 64 bit

StackOverflow https://stackoverflow.com/questions/972305

  •  13-09-2019
  •  | 
  •  

Domanda

Ho un'applicazione C # utilizzando C ++ oggetto COM sia costruire su una macchina a 32 bit. Ora devo eseguirli su una macchina a 64 bit. Mi sono registrato l'oggetto COM. Una voce corrispondente è stato creato nel registro di cui Computer \ HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID {xxx}. Tuttavia, quando si tenta di eseguire l'applicazione si dice che | "Recupero della class factory COM per il componente con CLSID {xxx} non riuscito a causa del seguente errore: 80040154.". Mi pare di capire, il codice di errore significa che la classe non è registrata. Per favore aiuto!!! Grazie

È stato utile?

Soluzione

La prima risposta di cui sopra è la risposta corretta. Non è possibile eseguire una CPU qualsiasi applicazione di destinazione a 64 bit di Windows, se si fa riferimento a un componente COM a 32 bit. Esso non verrà caricato.

Quello che sta accadendo è che il JIT è vedere CPU ANY e promuovere la tua App per 64 bit. Ma non esiste una versione a 64 bit del controllo com e, quindi, si ottiene l'errore non registrati.

Questo è un grosso problema per le persone che fanno uso di Microsoft Access per loro database. Non esiste una versione a 64 bit di accesso, in modo che quando vedono l'errore che pensano hanno bisogno di un tempo di esecuzione a 64 bit (non esiste). Dovete bandiera vostra applicazione a 32 bit solo al fine di utilizzare il runtime di Access.

Questa è una scelta sbagliata (IMHO) - trovare un componente migliore che ha una versione a 64 bit, o andare al 100% di codice gestito

.

Non mi piace per ogni tag applicazioni a 32 bit solo a meno che non ne hanno davvero bisogno.

Altri suggerimenti

Il C # app potrebbe essere stato compilato con l'obiettivo di qualsiasi CPU, che si svolgerà come nella modalità a 64 bit su una macchina x64. processi a 64 bit non possono accedere processi a 32 bit.

In Visual Studio, è possibile forzarlo a compilare come a 32 bit applicazione solo. E 'nelle proprietà del progetto, scheda, piattaforma di destinazione discesa costruire. Impostare a x86.

Ci possono essere altri modi di costringendolo a funzionare come un'applicazione a 32 bit, ma non sono a conoscenza.

Il runtime .NET viene eseguito automaticamente l'applicazione come a 64 bit e non è più in grado di caricare il componente COM a 32 bit nel suo processo.

E 'molto facile da aggirare se il componente COM ha interfaccia di automazione-compatibile. Creare un'applicazione COM + (Pannello di controllo-> Strumenti di amministrazione-> Servizi componenti) e aggiungere il componente in esso. In questo modo potrete imporre la creazione del componente in un processo separato e non sarà più cura che il vostro client applicativo eseguito come applicazione a 64 bit.

Non credo che è possibile eseguire un'applicazione a 32 bit in modo nativo su un computer a 64 bit. È necessario compilare l'app come 64bit binario o eseguirlo sotto un emulatore (come WOW64 su Windows). Se la vostra applicazione (costruito nel 64 bit binario) utilizza eventuali DLL esterne, è necessario anche la versione a 64 bit di tutte quelle DLL.

Ecco un buon riferimento:

http://searchwindowsserver.techtarget.com/tip/0 , 289483, sid68_gci1220022,00.html

Modifica:

Se si va alle proprietà del progetto -> Crea, cambia bersaglio della piattaforma da "Any CPU" per X86. Vedere se questo aiuta.

In alternativa, è necessario registrare le DLL: http://riteshk.blogspot.com/2007/05/retrieving-com-class-factory-failed-due.html

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