2011-01-12 18 views
5

İzole Dağıtım'da yerel COM dll'den bazı sınıfları kullanan bir uygulamam var.Etkinleştirme İçeriği WinForm ile çalışırken kayboluyor?

Basitleştirilmiş: Çalışma zamanında, dll dosyasını kendi manifest dosyası ile kaydetmeden belirli bir dizine indiriyorum. Daha sonra bu dizini işaret eden bir Aktivasyon Bağlamı oluşturun ve daha sonra dll'den sınıf örnekleri oluşturun. Diyelim ki A sınıfı oluşturduktan sonra, bir süre sonra B. Bu akışta her şey iyi gider. Ben bir WinForm olmak başvurumu değiştiği

sorun

başladı. "butonu 1" Daha önce olduğu gibi etkinleştirme içeriği oluşturmak ve sonra da bu iyi çalışıyor A sınıfı bir örneğini ve benim WinForm için akış gelirler yaratmak basıldığında. "Düğmesi 2" basıldığında Ancak zaman , ben sınıf bulunamıyor söyleyerek istisna almak sınıf B oluşturmak için başarısız! WinForm şekilde benim Aktivasyon bağlamı karıştırıyor gibi

Öyle görünüyor. - Neden böyle? Orada neler oluyor? - Etrafında bir yolu var mı?

Birkaç notlar: - Ben sxstrace.exe kullanarak Aktivasyon Bağlam kreasyonlarını aşağıdaki çalıştı, ancak sadece benim Aktivasyon Bağlam oluşturulmasını açmış. - Application.EnableVisualStyles() öğesini yorumlamaya çalıştım ancak yardımcı olmadı. - Her çağrıyı dll'imle Aktivasyon Bağlamı oluşturup yok edersem çalışır ancak doğal olarak oraya gitmek istemiyorum ..

cevap

1

CLR, bu yazılımın içinden geçerken Win32 Aktivasyon İçeriğini korumaya/korumayı garanti etmez. yönetilen kod.

bir geçici çözüm, yerel kod çağırmak orada etkinleştirme içeriği ayarlamak, sen gerekeni yap ve sonra bağlam restore etmektir. Muhtemelen sadece nesneye yükleme ve bağlama için ihtiyacınız var, bu yüzden IUnknown'ınız olduğunda bunu geri alabilirsiniz.

Martyn