.NET Object from VB6 without use of regasm.exe?

后端 未结 4 680
醉话见心
醉话见心 2020-12-16 07:20

The software company I\'m working for builds software for schools, and so our client machines are usually locked down in such a way it makes it pretty impossible for us to i

相关标签:
4条回答
  • 2020-12-16 07:50

    you say you can't install anything, but could you write the necessary stuff into the registry yourself? I think that all regasm does is write all some stuff to the registry, so you could effectively do that from your VB code on startup if its not there and then you might be able to load the interop assembly.

    you can use a tool like process monitor to see what gets written to the registry when you run regasm.

    I'd make sure you are using the -codebase switch and explicitly defining Guids for your interfaces and classes for the com wrappers as well. not doing so caused me no end of issues trying to get com wrapped .net dlls to work properly

    0 讨论(0)
  • 2020-12-16 07:53

    You could host the CLR inside Access:

    Add a reference to mscoree (Probably C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscoree.tlb)

    Sub Main()
        Dim CORHost As New mscoree.CorRuntimeHost
        Dim Domain As Object
        Dim AssemblyFilename As String
        Dim Classname As String
        Dim Result As Object
    
        AssemblyFilename = "mscorlib"
        Classname = "System.Collections.ArrayList"
    
        CORHost.Start
        CORHost.CurrentDomain Domain
        Set Result = Domain.CreateInstance(AssemblyFilename, Classname).Unwrap()
    
        Result.Add "test"
        MsgBox Result.Count
    End Sub
    

    This bypasses the need to use the registry. The down side of this is you have to use late binding with your objects.

    You can also add a reference to mscorlib.tlb to get type information for the AppDomain class and others.

    0 讨论(0)
  • 2020-12-16 07:59

    As long as your client systems are Windows XP or later then you have the option of using Registration Free COM. This replaces the need to registry the COM components using regasm (or regsvr32 for native COM servers) in the system registry with XML configuration manifest files.

    With this you still use the standard CreateObject calls to create your objects.

    0 讨论(0)
  • 2020-12-16 07:59

    If been using .Net DLLs from my VB6 projects by using manifests. The only requirement is the VB6 executable and .Net DLL be in the same folder.

    I'm using UMMM tool to automatically create the dependency entry in the application manifest.

    You can use ActCtx.Manifest property to dynamicly load a proper manifest for reg free access to .Net interop coclasses.

    0 讨论(0)
提交回复
热议问题