Wrapping .TLB file to .DLL for .NET
I have a .tlb file(neteng.tlb) that works on a vb 6 program. This library has module-based methods that i can call anywhere and it works fine.
Next I wrapped this module-based DLL(neteng.tlb) to another VB 6 COM as you have said. I did that by adding a referenced first to "neteng.tlb" library then adding the following code to the class (NETENGAPI is a module inside "neteng.tlb"):
'------------------------------------
Option Explicit
Public Function NE_IsNetwork1(name As String) As Boolean
NE_IsNetwork1 = NETENGAPI.NE_IsNetwork(name)
End Function
Public Function NE_OpenNetwork1(name As String, mode As AccessModeEnum) As Long
NE_OpenNetwork1 = NETENGAPI.NE_OpenNetwork(name, mode)
End Function
Public Sub NE_InitNetworkEngine1()
Call NETENGAPI.NE_InitNetworkEngine
End Sub
Public Sub NE_ExitNetworkEngine1()
Call NETENGAPI.NE_ExitNetworkEngine
End Sub
'------------------------------------
Then save the file as Netengs.DLL (class name is NetEngEng)
===>>> Process Flow: neteng.tlb wrapped inside ->netengs.dll
Note:
Netengs.dll purpose was to call those module-based methods inside neteng.tlb thru the class NetEngEng so we can expose them when we migrate it to .NET assembly code.
I created another VB6 Prog to test netengs.dll if its gonna work (i add a referenced first to netengs.dll). See code below:.
Option Explicit
Dim shp As String
Dim net As NetEngs.NetEngEng
Private Sub Form_Load()
Set net = New NetEngEng
Call net.NE_InitNetworkEngine1
shp = "d:\tracking\shapes\roadcenter_mkt_only.nws"
'Dim net As New NetEngs.NetEngEng
Dim bool As Boolean
'bool = net.NE_IsNetwork1(shp)
bool = net.NE_IsNetwork1(shp)
If bool Then
MsgBox ("Is network")
Else
MsgBox ("Is not network")
End If
Dim ne As Long
ne = net.NE_OpenNetwork1(shp, 1)
If (ne = 0) Then
MsgBox "Network " + shp + " not found.", vbCritical
Exit Sub
End If
Call net.NE_ExitNetworkEngine1
End Sub
'-----------
but when i run the prog and it step into the code Call net.NE_InitNetworkEngine1 it raises this error:
The instruction at "0x00001de2" referenced at "0x00001de2". The memory could not be "read."
My neteng.dll that wraps neteng.tlb don't even work inside another vb 6 prog. Whats wrong with neteng.dll here? Am i missing something? It would be more disaster if i import this to interop assembly. Tnx!