2008-08-18 13 views
4

Bazı yeni kullanıcı arayüzünü Managed/C# land'a geçirme görevinde, kısa bir süre önce MFC kullanan büyük bir eski projede Ortak Dil Çalışma Zamanı Desteği'ni (/ clr) açtım. Paylaşılan bir DLL'de ve genel çözümümüz dahilinde yaklaşık bir düzine başka projeye güvenir. Bu proje başvurumuzun temelini oluşturuyor ve üretilen herhangi bir yönetilen UI kodunu kullanıyor (dolayısıyla interop için clr desteğini açma ihtiyacı).Karma C++/CLI TypeLoadException Dahili sınırlama: çok fazla alan

küçük niggly hata ve uyarıların bir ton sabitleme sonra nihayet derlemek için uygulamayı başardı .. Ancak uygulamasını çalıştıran bir EETypeLoadException neden olur ve hata ayıklama beni yapamaz bırakır ...

bazı Doing kazma, "System.TypeLoadException: İç sınırlama: çok fazla alan" nedenini buldum. Derleme sonunda doğru gerçekleşir. Sonra this link'u buldum ve bu da montajı iki veya daha fazla dll'ye ayırmayı önerdi. Ancak, bu benim durumumda mümkün değil, bir sınırlama olarak, eski kodun temel olarak dokunulmamış olmasıdır.

Başka herhangi bir olası çözüm önerebilir mi? Burada gerçekten bir çıkmaz sokaktayım.

cevap

7

C/C++ Kod Üretimi altındaki Enable String Pooling seçeneğinin açık olduğundan emin olun.

Genellikle bu sorunu giderir, bu "huh?" Excel elektronik tablolarında 64k sınırı gibi MS sınırlamaları. Sadece bu, bir montajda görünebilecek sembollerin sayısını etkiler.

2

Bunu üç kez (3x) çok büyük karma modlu (C#/C++) uygulamalarla yaptım ve yukarıdaki düzeltmeyi bir kez yerine yerleştirdikten sonra bir daha hata görmedik.

Ve hayır, her şey bu (. Hiç Ancak ölçebilir şey) biraz daha hızlı çalışma zamanı yürütme yol açmalıdır

Ama biraz bir eğreti ait olduğunu kabul ediyorsanız. Semboller üzerindeki içsel sınır, bir sorun olmak için kullanılmadı, ya da bu sınırın çok daha yüksek olduğu. Daha sonra MS, bazı yükleyici kodunu değiştirdi. MSDN’ye girdim ve hakkında konuştum ve belirsiz bir ifadeyle anlatılmamıştı, “sadece bir aptal bu sembolleri tek bir meclise koyardı”.

(artık MSDN'de katılmak nedenlerinden biri de bu.)

Eh, aptal beni renklendirmek ama benim uygulamanın fiziksel yapısını değiştirmek zorunda gerektiğini sanmıyorum, dışarı şeyleri kırarak uydu DLL'leri içine, sadece yükleyici 10,001 sembol karar verdiğini almak için 1 çok fazla.

Ve belirttiğiniz gibi, genellikle derlemeler/uydu DLL'lerinin yapısı ve içerdikleri bağımlılık türleri üzerinde denetimimiz yoktur.

Ancak bu hatayı tekrar göreceğinizi sanmıyorum, her durumda.

+0

Hata ayıklama 64 yapıları üzerinde biriken dize ile hatayı hala görüyorum. Görsel stüdyolu hatalar ve bir çözümde birden fazla yönetilen derleme yaratma nedeniyle montajdan ayrılmıyoruz. VS 2008'i kullanma. –

3

Projenin tamamı için aç/kapat mı gerekiyor? Bunun yerine, yalnızca birkaç küçük dosya için açabilir ve yönetilen kodu nasıl eklediğinize çok dikkat edebilir misiniz? Büyük bir C++/MFC uygulaması ile çalışıyorum ve yönetilen C++ kullanmak çok zor bulduk. C# ve .NET'i seviyorum ama C++ yönetilen bir baş ağrısından başka bir şey olmadı. Sorunlarımızın çoğu .NET 1.0/1.1 ile oldu ... belki şimdi işler daha iyi.