2008-12-11 13 views
22

Kütüphanelerim AnyCPU olarak derlendiği için x64 altında çalışan bir x64 sunucum var. X86 altında kayıtlı bir COM bileşenine erişmemiz gerekiyor. COM hakkında yeterince bilgim yok ve google aramalarım hiçbir yere gitmiyor.x64'ten x86 COM erişimi x64 .NET

Soru: COM bileşeni için x86 geri x64 sembolik bir kayıt bağlantısını kullanabilir miyim? COM bileşenini x64 altına kaydetmem gerekiyor mu? Ben (burada herhangi bir açıklama ...) yapabilir miyim?

Teşekkürler. o sürecin yanlış sıralama çünkü

cevap

26

bir bileşeni 64-yerli çalışıyorsa, o, işlem içi 32 bit COM sunucusu yüklenemiyor. olası çözümler birkaç vardır:

  1. sen, (tabii 64-bit kayıt kendisini kayıt altına alacak) COM kodunun 64-bit sürümünü inşa edebilirsiniz varsa. Bu en temiz çözümdür, ancak COM sunucusu için kodunuz yoksa mümkün olmayabilir.

  2. yerine x64, 32 bit x86 olarak .NET bileşeni çalıştırın. Sanırım bir sebepten dolayı bunu zaten düşündünüz ve reddettiniz.

  3. Ana COM bileşeni COM surrogate DLLHost.exe kullanılarak işlem. Bu, COM sunucusuna çok daha yavaş çağrı yapacak (şimdi yerel işlev çağrıları yerine ara işlemciler olacak), ancak aksi takdirde şeffaftır (özel bir şey yapmanız gerekmez).

    Vekil sunucuda 64 bitlik bir sürüm olmayacağından, sunucunun normal oleaut32 one yerine (çok nadir olsa da) özel bir proxy-saplama gerektirmesi olası bir seçenek olmayacaktır. . Olağan OLE marshallingini kullanabildiği sürece, sadece register it for surrogate activation.

+0

1. olarak dllhost mümkün değildir. # 2, x64 üzerinde çalışmanın amacını ortadan kaldırır. # 3 harika çalıştı. Kütüphanenin yeni bir versiyonunu elde edene kadar performans isabetleriyle burada yaşayabiliriz. Yardım ettiğin için teşekkür ederim. –

2

Bu sizin COM bileşeni (yani ayrı süreci) o zaman COM alt sistem olarak özel bir şey yapmanıza gerek olmayacak bir COM sunucusu içinde yer alır oluyor olacak uzaktan X86 uygulamasına aktararak x64 uygulamasından aramalar ve tekrar.

sizin bileşen COM bileşeni o zaman 64 bit süreç olarak şeyleri yeniden düşünmek gerekir işlem içi bir süreç COM bileşenleri 32 bit kullanamazsınız ise. Sunucunuzu x86 altında çalışacak şekilde zorlayabilirsiniz, böylece bileşenlere erişebilirsiniz (her ikisi de 32 bit işlem olacaktır). Bunu yapmak istemiyorsanız, kullanmakta olduğunuz COM bileşenlerinin x64 bit sürümünün olup olmadığını görmeniz gerekir.

Bu çözümü bulduk
6

, Dealing with Legacy 32-bit Components in 64-bit Windows makalesinde bakın:
işlem içi dışarı işlem dışı bir ev sahibi olarak (benim için bu işi) COM + kullanma •

kullanma • Bir proje türünü dönüştürme • hiçbir x64 sürümü var gibi bir vekil ev sahibinin

+7

Ayna bağlantısı: http://www.scribd.com/doc/56629579/64-Bit-Insider-Volume-1-Issue-7 – Juhl

İlgili konular