Visual Basic 6 programs may call RLM functions to implement software licensing functionality. There are a few extra steps that must be taken beyond what’s needed in C/C++ programs to make it work however. This is a description of those steps.
Using RLM with Visual Basic 6
Download and Build the RLM SDK
This process is described in the RLM Getting Started Guide.
One of the products of the SDK build is rlm.dll, a dll containing the RLM functions in executable form. It is these functions that will be called from VB6.
Build an Interface DLL
Because Visual Basic and C use different conventions for calling functions, and because C can be made to use Basic’s conventions but the reverse is not true, you must build a simple interface layer in C which accepts function calls in Basic using Basic’s conventions, and calls C using C’s conventions. This layer is very simple. For each RLM function call to be made from Basic, write a C wrapper function. Each function should:
- Have a name <rlm-function>_stdcall and invoke the corresponding <rlm-function>
- Declare arguments identical to the corresponding RLM function
- Include “ stdcall” between the function’s return type and the function name (stdcall is what tells the compiler to expect to be called with Basic calling conventions)
Here is an example rlmstdcall.c, using 6 fundamental RLM functions:
An exports definition file must also be created, naming each wrapper function. Here is an example rlmstdcall.def, exporting the 6 wrapper functions from the example above:
With the C source file rlmstdcall.c and the exports file rlmstdcall.def in place, the dll rlmstdcall.dll is built as follows (this assumes that the c file and the def file are in the x86_w3 directory on the RLM SDK):
$ cl /c /MD /I..\src /Forlmstdcall.obj rlmstdcall.c
$ link /nologo /dll /out:rlmstdcall.dll /def:rlmstdcall.def
Create Basic Function Declarations for the RLM Functions to be Called
For each RLM function to be called from Basic, write a Basic function declaration for it. The declaration specifies the data type of each argument and how to pass it, and the function’s return type. Arguments should be passed by value, using the “ByVal” specifier. C and Basic types used by RLM are as follows:
Here is an example of the Basic function declarations of the 6 RLM functions used in previous examples:
Add RLM Function Calls to your Basic Program
Here is a small example Basic program using some of the functions from the previous examples: