SORU
21 Ocak 2009, ÇARŞAMBA


Bildirim dosyaları oluşturmak kayıtsız COM için

Bazı uygulamalar (native, bazı bazı .Kullanım NET) 10**, herhangi bir küresel COM kayıt gerektirmeden böylece dosyaların listesi. Örneğin, dbgrid32 bağımlılığı.ayrıca com sunucu uygulamam şu şekilde bildirildi.exe.myapp.exe aynı klasör içinde yer alan dosya bildirim:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="myapp.exe" version="1.2.3.4" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="dbgrid32.ocx" version="5.1.81.4" />
    </dependentAssembly>
  </dependency>
</assembly>

Bu dbgrid32.ayrıca aynı klasör, kendi dbgrid32 ile birlikte dağıtılır.ayrıca.bildirim dosyası:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="dbgrid32.ocx" version="5.1.81.4" />
  <file name="dbgrid32.ocx">
     <typelib
        tlbid="{00028C01-0000-0000-0000-000000000046}"
        version="1.0"
        helpdir=""/>
    <comClass progid="MSDBGrid.DBGrid"
       clsid="{00028C00-0000-0000-0000-000000000046}"
       description="DBGrid  Control" />
  </file>
</assembly>

Bu gayet iyi çalışıyor ama manuel olarak bu dosya bildirim dosyaları korumak için bir ağrı biraz. Bir şekilde bu dosyaları oluşturmak için otomatik olarak var mı? İdeal sadece COM sunucuları (hem yerli hem de .bir liste uygulamanın bağımlılık bildirmek isterim NET) ve daha sonra geri kalanı otomatik olarak oluşturulan olalım. Mümkün mü?

CEVAP
25 Ocak 2009, Pazar


Mükemmel bir çözüm henüz yok gibi görünüyor. Biraz araştırma özetlemek gerekirse:

Benim Ortaya Koymak(link)

Bu araç VB6 projesi COM bağımlılıkları aramak için tarar, ama aynı zamanda bağlı geç COM bağımlılıklar (o CreateObject ile kullanılan yani) manuel bildirimi destekler.

İlginçtir ki, bu araç, uygulama içinde bağımlılıkları bildirim hakkında tüm bilgileri koyar. Uygulama exe ve bağımlılıkları tek bir derleme birden fazla dosya oluşan olarak tarif edilir. Bunun mümkün olduğunu daha önce fark etmemiştim.

Çok iyi bir araç gibi görünüyor ama sürüm 0.6.6 olarak aşağıdaki sınırlamaları vardır:

  • sadece VB6 uygulamaları için başlar VB6 proje dosyasından. Çünkü ayıp ne çok şey yapmak zorunda VB6 ile.
  • sihirbaz tarzı bir uygulama değil uygun entegre bir yapı için süreç. Bu sizin için büyük bir sorun değildir bağımlılıkları çok fazla değişiklik yok.
  • kaynak olmadan ücretsiz, abandonware haline gelebilir, çünkü güvenmek riskli her an.

Bunu destekleyip desteklemediğini test edemedim .NET com kitaplığı.

regsvr42(codeproject link)

Bu komut satırı aracı, yerel COM kütüphaneleri için listesi dosyaları oluşturur. DllRegisterServer çağırır ve daha sonra kayıt defterine bilgi ekler gibi kendi kendine kayıt Casuslar. Ayrıca, bir istemci uygulamalar için bildirim elde edebilirsiniz.

Bu programı desteklemiyor .Bu DllRegisterServer rutin bırakmayın bu yana NET COM kitaplıkları.

Programı C ile yazılmış . Kaynak kodu mevcuttur.

mt.exe

Eğer visual studio varsa zaten var olan windows SDK bir parçası (MSDN indirebilirsiniz) yüklü. documented here. Bu gibi yerel COM kütüphaneleri için listesi dosyaları oluşturabilirsiniz:

mt.exe -tlb:mycomlib.ocx -dll:mycomlib.ocx -out:mycomlib.ocx.manifest

Bildirim dosyaları oluşturmak için kullanabilirsiniz .Bunu NET COM kütüphaneleri bu gibi:

mt.exe -managedassemblyname:netlib.dll -nodependency -out:netlib.dll.manifest

Ancak, bu araç ile bazı sorunlar vardır:

  • İlk parçacığı oluşturmaz kimliği öznitelikleri, kırma müşterileri Progıd CreateObject kullanmak.
  • İkinci Pasajı oluşturur <runtime> <mvid> elementler daha önce çıkarılmış şekilde olması gerekir bildirimlerin gerçekten işe yarıyor.
  • İstemci oluşturmak için gösterir uygulamalar desteklenmiyor.

Belki gelecek SDK sürümleri bu aracı geliştirmek, Windows bir test SDK 6.0 (vista).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • JorteexHD

    JorteexHD

    20 NİSAN 2012
  • Trevor Eckhart

    Trevor Eckha

    19 Aralık 2009