Registrace DLL   zodpovězená otázka

Visual Studio, .NET

Dobrý den,

potřebovala bych poradit s následujícím problémem:

Tvořím dll knihovnu, která má sloužit jako jakási nádstavba nad hotovým programem (ArcGIS). Pokud výsledek "buildnu" přímo z Visual studia, tak vše běží tak jak má, problém přichází ve chvíli, kdy potřebuji mojí dll zaregistrovat na cizím počítači, kde Visual Studio není. :)

Zkoušela jsem různé věci, co jsem tak po internetu našla, ale nic mi nefunguje (patrně především proto, že většině těch nalezených věcí moc nerozumím).

Proto se ptám - neexistuje nějaká kouzelná formule, co dokáže nahradit tlačítko "Build"?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak zaregistrovat? Knihovny .NET není třeba nijak registrovat pokud neobsahují COM rozhraní pro spolupráci s nativními programy, nebo není nutné je umístit do GAC.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Ano, ano, přesně ty COM obsahují. Omlouvám se, že se nevyjadřuji úplně přesně (hodí se na mě přirovnání s kozou a petrželí).

Níže přikládám začátek kódu pro tvorbu vytvoření command buttonu v ArcGISU, třeba to řekne víc...

<ComClass(Command1.ClassId, Command1.InterfaceId, Command1.EventsId), _
 ProgId("Toolbar3D.Command1")> _
Public NotInheritable Class Command1
    Inherits BaseCommand

#Region "COM GUIDs"
    ' These  GUIDs provide the COM identity for this class 
    ' and its COM interfaces. If you change them, existing 
    ' clients will no longer be able to access the class.
    Public Const ClassId As String = "267311e4-9e5d-49af-bef2-70427f603340"
    Public Const InterfaceId As String = "9c9ce55c-641a-46b9-be43-ee72a134ec2f"
    Public Const EventsId As String = "a912cda6-a5d3-428d-b12e-1b3ca2279430"
#End Region

#Region "COM Registration Function(s)"
    <ComRegisterFunction(), ComVisibleAttribute(False)> _
    Public Shared Sub RegisterFunction(ByVal registerType As Type)
        ' Required for ArcGIS Component Category Registrar support
        ArcGISCategoryRegistration(registerType)

        'Add any COM registration code after the ArcGISCategoryRegistration() call

    End Sub

    <ComUnregisterFunction(), ComVisibleAttribute(False)> _
    Public Shared Sub UnregisterFunction(ByVal registerType As Type)
        ' Required for ArcGIS Component Category Registrar support
        ArcGISCategoryUnregistration(registerType)

        'Add any COM unregistration code after the ArcGISCategoryUnregistration() call

    End Sub

#Region "ArcGIS Component Category Registrar generated code"
    Private Shared Sub ArcGISCategoryRegistration(ByVal registerType As Type)
        Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
        MxCommands.Register(regKey)

    End Sub
    Private Shared Sub ArcGISCategoryUnregistration(ByVal registerType As Type)
        Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
        MxCommands.Unregister(regKey)

    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha, už si rozumíme. No ono je to složitější, aby bylo pro nativní aplikace viditelné COM rozhraní obsažené v .NET binárce, je nutné při každé její změně vygenerovat i typovou knihovnu a příslušné údaje v registru. K tomu slouží nástroj Regasm.exe, který je součástí .NET Frameworku. Ten vytvoří typovou knihovnu a .reg soubor, který naimportuje příslušné údaje na cílovém počítači. Tomuto se bohužel nejde vyhnout, je to jedna ze slabých stránek COM rozhraní - spousta různých verzí souborů v systému a bordel v registru.

Více na http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odpověď. Váš odkaz mě přivedl na další odkazy a jeden z nich byl ten, po kterém jsem toužila.

Pokud tedy někdo někdy bude řešit stejný problém s dll a Arcgisem, pak čtěte http://mrrichie.spaces.live.com/blog/cns!DD16C3F34F4D913E!639.entry

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback