I am researching how to create a dll in VB..can it even be done? Does anyone know of any sites or books that can help me through this process?

Dani AI

Generated

Short answer: yes — VB6 creates in-proc COM servers (aka ActiveX DLLs). They are different from export-based Win32 DLLs, which is why mentioned “entry points.” A VB6 DLL is activated by COM (CLSID/ProgID) rather than by LoadLibrary/GetProcAddress. From C/C++, you create the object with CoCreateInstance and talk to it via interfaces (IUnknown/IDispatch). (learn.microsoft.com)

and : you can call a VB6 ActiveX DLL from C++, but not “like any other DLL.” Register it, initialize COM, then create the object. A minimal early-binding pattern looks like this (assumes the VB6 DLL exposes a coclass YourClass and a method DoWork):

#import "YourVb6Server.dll" no_namespace raw_interfaces_only
#include <combaseapi.h>

int main() {
  CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);  // init COM
  _YourClassPtr p;
  if (SUCCEEDED(p.CreateInstance(__uuidof(YourClass)))) {
    p->DoWork();
  }
  CoUninitialize();
}

Key steps:

  • Register the DLL: on 64-bit Windows, use the 32-bit regsvr32 for 32-bit VB6 DLLs: %SystemRoot%\SysWOW64\regsvr32 YourVb6Server.dll. (support.microsoft.com)
  • Initialize COM on the calling thread (CoInitializeEx/CoUninitialize). (learn.microsoft.com)
  • Remember that 32-bit processes cannot load 64-bit DLLs and vice versa. VB6 outputs 32-bit binaries, so your C++ client must be 32-bit (or use an out-of-proc server). (learn.microsoft.com)

’s COM+ walkthrough is useful if you need transactions/queuing, but you do not need COM+ just to consume a VB6 DLL. If you do use it, you can open Component Services with dcomcnfg (or run: mmc comexp.msc /32 on older x64 systems when configuring 32-bit components). (learn.microsoft.com)

Two durability tips often missed:

  • Set Project Properties -> Component -> Binary Compatibility and point at your last released DLL to keep CLSIDs/IIDs stable for existing clients. Avoid changing public method signatures; add new methods instead.
  • For .NET callers (, ): .NET assemblies are not Win32 DLLs either, but you can expose .NET classes to COM with Regasm or .NET’s COM hosting so COM clients can CoCreateInstance them. (learn.microsoft.com)

Recommended Answers

All 11 Replies

I'm sure if you google it, there is 1 or 2. The problem is this, though. The dll's that you create with VB are not "true dll's", they are "activeX dll's", and it's sort of complicated, but it has to due with "Entry Points". So, if you need to "up your search" on google, do a search for say: +"visual basic" +"activex dll" on google.... maybe it will come up with something.

hi,

1. in vb dlls are created with application type ActiveX dll. (select as new project -->open it)
2. u will get one class window opened.
3. u can write code in this window.
4. in project menu-->refferences
add refference to COM+ Serviece Type library.
5. for using with ADO. u need to add
microsoft activex data object library 2.5

6. set propertys of class module.
instance property - 5- multy use
mts transactionmode --> 2 RequiresTransaction
7. write following code (sample)

Public Function GetServerDate() As Date
On Error GoTo errlbl
Dim objCont As COMSVCSLib.ObjectContext
Set objCont = GetObjectContext

GetServerDate = Date
objCont.SetComplete
Set objCont = Nothing
Exit Function
errlbl:
' if we need can add log method here
objCont.SetAbort
Set objCont = Nothing
End Function

Public Function GetServerServerTime() As String
On Error GoTo errlbl
' { common for every dll
Dim objCont As COMSVCSLib.ObjectContext
Set objCont = GetObjectContext
''}
''----------------------------
' general program here. like in class module
GetServerServerTime = Time
''-----------------------------
''{ common to dll
objCont.SetComplete
Set objCont = Nothing
''}
Exit Function
'{optional}
errlbl:
' if we need can add log method here
objCont.SetAbort
Set objCont = Nothing
End Function

8. in project menu --> component tab.
select project compatability option(default)
(study abt compatability by clicking the help button in this dailog box(u can get info in less time else go for google
imp: first time u creating a dll default is correct( new GUID is created, study more abt guid in help. imp2: when u modifing code in dll. select binary compatability) )

click OK.
If u r developing dll for 3 tire architecture. u need to select server files check box.

9. then file --> make .dll.

10. open control panel->compnent services
console root->comp services-> my computers>com+ applictions
right click -> new application ->next-> select create emply application>enter new app name, select library app opt. if not server 3tire app.-> next ->finish

11. u will get a new app name in tree view. click on +
right click on components > new > component > next > select install new components > select dll file name > open > next > finish
(by drag drop also we can do it, check help for more info)
12. now u will get new dll added in component services explore.
--------------
13. now open standard vb appliction
place 2 text boxs, 2 buttons

peast following code.
Private Sub Command1_Click()
Dim obj As Dll_co_common.ClsCommon
Set obj = CreateObject("Dll_co_common.ClsCommon")
Text1.Text = obj.GetServerServerdate
Set obj = Nothing
End Sub

Private Sub Command2_Click()
Dim obj As Dll_co_common.ClsCommon
Set obj = CreateObject("Dll_co_common.ClsCommon")
Text2Text = obj.GetServerServerTime
Set obj = Nothing
End Sub

14. add refference to dll.
project menu>refferences
check new dll file name, if not found browes to add new dll to add to refference list.

15. now run ur client program.

u can also develop for database programs also.
my suggestion is go throug help in vb(msdn) dailog box, dont spend for more time to search for concept itself.
i think it will help u, for atleast starting of dll coding.
if it is not enough for ur requirement use keywork from the program to search in online sources
enjoy vb programming .... all the best my friend

Does anyone know if you can create a non activeX dll, or if an ActiveX dll can be called like a regular dll from a c++ program?

Yes, U definitely can. And it is very easy. Just open your project as an active X dll project and you are on your way! Of course you have to be certain what you want to do.

Hello I am new to this DLL stuff and I am not able to find the "compnent services" that you have mentioned in the control panel ..could you just tell me if the name has been changed or some thing like that?

This depends on the operating system you are using and I believe there is not much difference across systems. I am using windows 2000 adv. server. The component services can be seen after clicking "administrative tools" icon. Component services is one of the icons that is displayed if you look closely.;)

Hello I am new to this DLL stuff and I am not able to find the "compnent services" that you have mentioned in the control panel ..could you just tell me if the name has been changed or some thing like that?

Yes, Yes my dear:!:
That is the power of the ActiveX technology.
You can call the activeX dll from c++ like any other dll with the following proviso.

  • you have to register the created ActiveX dll on your machine using regsvr32.exe command
  • you have to reference the dll in your c++ project
  • thereafter make method calls to it like any other dll

comprende?;)

Does anyone know if you can create a non activeX dll, or if an ActiveX dll can be called like a regular dll from a c++ program?

I am researching how to create a dll in VB..can it even be done? Does anyone know of any sites or books that can help me through this process?

Yes - Using VB dot Net

for using the
---Dim obj As Dll_co_common.ClsCommon
---Set obj = CreateObject("Dll_co_common.ClsCommon")
in the code that srikanthvja; had given do we need to add some more reference to the project to make it working

I was getting a run time error in the above two lines of code

hi,

1. in vb dlls are created with application type ActiveX dll. (select as new project -->open it)
2. u will get one class window opened.
3. u can write code in this window.
4. in project menu-->refferences
add refference to COM+ Serviece Type library.
5. for using with ADO. u need to add
microsoft activex data object library 2.5

6. set propertys of class module.
instance property - 5- multy use
mts transactionmode --> 2 RequiresTransaction
7. write following code (sample)

Public Function GetServerDate() As Date
On Error GoTo errlbl
Dim objCont As COMSVCSLib.ObjectContext
Set objCont = GetObjectContext

GetServerDate = Date
objCont.SetComplete
Set objCont = Nothing
Exit Function
errlbl:
' if we need can add log method here
objCont.SetAbort
Set objCont = Nothing
End Function

Public Function GetServerServerTime() As String
On Error GoTo errlbl
' { common for every dll
Dim objCont As COMSVCSLib.ObjectContext
Set objCont = GetObjectContext
''}
''----------------------------
' general program here. like in class module
GetServerServerTime = Time
''-----------------------------
''{ common to dll
objCont.SetComplete
Set objCont = Nothing
''}
Exit Function
'{optional}
errlbl:
' if we need can add log method here
objCont.SetAbort
Set objCont = Nothing
End Function

8. in project menu --> component tab.
select project compatability option(default)
(study abt compatability by clicking the help button in this dailog box(u can get info in less time else go for google
imp: first time u creating a dll default is correct( new GUID is created, study more abt guid in help. imp2: when u modifing code in dll. select binary compatability) )

click OK.
If u r developing dll for 3 tire architecture. u need to select server files check box.

9. then file --> make .dll.

10. open control panel->compnent services
console root->comp services-> my computers>com+ applictions
right click -> new application ->next-> select create emply application>enter new app name, select library app opt. if not server 3tire app.-> next ->finish

11. u will get a new app name in tree view. click on +
right click on components > new > component > next > select install new components > select dll file name > open > next > finish
(by drag drop also we can do it, check help for more info)
12. now u will get new dll added in component services explore.
--------------
13. now open standard vb appliction
place 2 text boxs, 2 buttons

peast following code.
Private Sub Command1_Click()
Dim obj As Dll_co_common.ClsCommon
Set obj = CreateObject("Dll_co_common.ClsCommon")
Text1.Text = obj.GetServerServerdate
Set obj = Nothing
End Sub

Private Sub Command2_Click()
Dim obj As Dll_co_common.ClsCommon
Set obj = CreateObject("Dll_co_common.ClsCommon")
Text2Text = obj.GetServerServerTime
Set obj = Nothing
End Sub

14. add refference to dll.
project menu>refferences
check new dll file name, if not found browes to add new dll to add to refference list.

15. now run ur client program.

u can also develop for database programs also.
my suggestion is go throug help in vb(msdn) dailog box, dont spend for more time to search for concept itself.
i think it will help u, for atleast starting of dll coding.
if it is not enough for ur requirement use keywork from the program to search in online sources
enjoy vb programming .... all the best my friend

Yes - Using VB dot Net

yeah, be cheap and use VB express if you have to.

Its much easier in .NET but bear in mind that they are still not true dlls either as they need the .NET CLR

Follow those steps.
1. start with "basic dll example" using OREILLY's well documented article (following link) http://windowsdevcenter.com/pub/a/windows/2005/04/26/create_dll.html

2. once done (1) you are 70% done.
finish- by tuning up using Mathimagics Manual of "Advanced VB6 DLL Construction".

3. 1,2 will bring you the the point of having a readable Dynamic Link Lib. File, fully readable by C/.Net and so.., since the functions declared are compatible using a standard Entry Point and formal functions (subs..) name declaration. Its simpler then it sounds. You will master those simple tasks in no time :)
http://www.xtremevbtalk.com/showthread.php?t=282796

EladKarako

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.