Referencing dll's and ActiveX exe's - (more pts for a solution)

Can project references to dll's or ActiveX exe's be modified dynamically in Vb, I seem to remember they can in Access using Vba. Eg if my compiled exe references a dll or ActiveX exe on one server can I change the reference to a dll or ActiveX exe on another server?

More points if there is a solution and the answer is more than 'no'.
rhubarbtwoAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Hornet241Connect With a Mentor Commented:
That will work.

You can also copy the DLL using Windows Explorer from the Server and paste it on top of "regsvr32.exe", also you could drag the DLL and drop it on the "regsrv32.exe".  

All of these ways will work when done from the machine you want to register it on.

0
 
rkot2000Commented:
I think you can use late binding to do this.

0
 
beckinghCommented:
Right.  Just don't make your project reference a specific DLL or EXE.  Then in your code, create the object like this:

Set myObj = CreateObject("MyObj.ObjectName")

Obviously, you can pass in a string to "CreateObject", so you can modify it as necessary.

This is Late Binding.
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
mcbethCommented:
you have to unregister the dll and then register the dll you like to use. Windows stores the information where to find the dll local. e.g. if you register a dll not local Windows create a fake Interface und forward all requests to the dll (called proxy stub).  
0
 
amebaCommented:
You can also use Early binding.
You don't need reference to the actual ActiveX DLL or EXE, you only need reference to interface it implements.
0
 
Valliappan ANSenior Tech ConsultantCommented:
If you are talking about different OS, or specific servers, then you could also, use compiler directives for declaration, if I am right.

Cheers
0
 
Hornet241Commented:
You can use the create object function

Set Obj = CreateObject("MyObj.ObjectName", "MyServerName")

I have used this on a W2K server with the object in a Com+ application, I think it should work with an MTS object as well
0
 
rhubarbtwoAuthor Commented:
So I can dynamically reference a dll if I don't reference a specific DLL in the references dialog and if I use late binding with method CreateObject. But Windows has to know about the object name (MyObj.ObjectName) so that dll has to be registered with Windows.

Now if I have the dll or activeX exe located on 2 different servers and the file name is identical, could I differentiate between dll's, eg depending on a parameter could I instantiate either 1 of the 2 dll's? I can't see how I can because when the dll's are registered with Windows using a proxy stub the dll's would have identical class names.
0
 
rkot2000Commented:
try to use :
CreateObject(prodname.classname, location)

prodname.classname
Required.The type or class of the object to create.

location

Optional. The name of the network server where the object is to be created.

0
 
amebaCommented:
' Early bound sample 1
' add reference to whichever MyObj.dll you want
Dim Obj As MyObj.ObjectName
Set Obj = CreateObject("MyObj.ObjectName", "MyServerName")


' Early bound sample 2
' add reference to whichever MyObj.dll you want, or reference to other dll or type library which contains declaration for interface IObjectName

Dim Obj As SomeDll.IObjectName
Set Obj = CreateObject("MyObj.ObjectName", "MyServerName")
(where MyObj.ObjectName implements IObjectName interface)
or:
Set Obj = CreateObject("TheObj.WhatEver", "MyServerName")
(where TheObj.WhatEver implements IObjectName interface)
0
 
Hornet241Commented:
One thing to remember when using the server parameter with the createobject function is that the DLL must be registered on both the Calling machine and the server.

>>>Now if I have the dll or activeX exe located on 2 different servers and the file name is identical, could I differentiate between dll's, eg depending on a parameter could I instantiate either 1 of the 2 dll's?

 If the class id of the DLL is the same all around then the Servername will determine the location it is created

One other thing the DLL does not have to reside on the calling machine, it just has to be registered
0
 
Hornet241Commented:
Forgot to mention that you only register the DLL once on the calling machine, the physical location does not matter as when the Servername parameter is use it does not even look for the file just the class id in the registry
0
 
rhubarbtwoAuthor Commented:
Thanks everyone for your help, I think Hornet241's comments have been the most help to my specific problem.

Hornet: how do I register a dll on the calling machine when the dll is located on a server? Do I run regsvr.exe on the client with a path to the dll on the server as the argument?
0
 
rhubarbtwoAuthor Commented:
Thanks, that's interesting
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.