2016-04-06 30 views
0

Bir makinede bir. Net COM dll (hata ayıklama x64) oluşturdum. Tüm kurulum ve orada çalışıyorum (C: \ Windows \ Micorosft.NET \ assembly ve OLEVIEWER'da görebiliyorum).COM .NET DLL GAC'de (REGDB_E_CLASSNOTREG) kaydetmiyor

Dll'yi başka bir makineye götürdüm (bununla birlikte .h ve MIDL'den oluşturulan .c dosyası). Ben bu adımları http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html takip ederek GAC içine dll kayıt - anahtar çifti oluşturmak, MISL oluşturmak, anahtar ile MISL montaj yeniden ve ardından GAC ekleyerek. GAC'de görünüyor ve gacutil/l MyDllName ile aramayı deneyebilirim. Ancak, benim istemci uygulamasında, ona karşı bağlantı kurarken, CoCreateInstance çağrılırken çalışma zamanında REGDB_E_CLASSNOTREG (HRESULT) olsun. C: \ Windows \ Microsoft.NET/Assembly veya OLEVIEW içinde dll göremiyorum.

Herhangi bir adımı kaçırdım veya yanlış bir şey mi yaptım? senin .net COM DLL kayıtlı olmadığından

Teşekkür

+1

Montajı kaydetmek için Regasm.exe'yi kullanmadan hiç bahsetmediniz. Projenin "COM etkileşimi için kaydet" onay kutusunu kullandığınızda, bunu dev makinenizde atlayabilirsiniz. Kullanıcının makinesinde değil elbette. MIDL kullanmak oldukça garip bir btw, bu kundak çalmıyor. –

+0

, MIDL kullanmıyorsa (http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html şovdaki öğretici olarak), "kosher" nedir? Bunu yapmanın yolu? (btw benim MIDL kullanarak düşündüm biraz hacky olduğunu) – Prof

+0

Normalde bir yönerge direktifini bir C++ programında kullanırdınız. –

cevap

2

nedeni hatayı REGDB_E_CLASSNOTREG alıyorsanız olduğunu. İstemcilere bir com sınıfı olarak maruz kalması için herhangi bir .net derlemesi kaydedilmelidir. .net aksamını kaydetmek için regasm.exe kullanmamız gerekiyor.

+0

Bu beni daha da geliştirdi. Ben hala OLEVIEW (Ben COM dll inşa ettiğim makinede olabilir) Tür Kitaplıkları altında derleme göremiyorum. Ayrıca, hedef makinemdeki istemci uygulamasındaki arabirimde bir yöntemi çağırmayı denediğimde, "... derleyici optimizasyonlarından dolayı bir adresi yok." – Prof

+1

Bunun nedeni, derleme türü kitaplığının kayıtlı olmamasıdır. Regasm.exe "regasm myTest.dll /tlb:myTest.tlb" gibi/tlb parametresi ekleyerek kayıt olabilirsiniz. Önceki komut myTest.dll kaydeder ve ayrıca myTest.tlb tür kitaplığını oluşturur ve kaydeder. – vamsee

İlgili konular