I've been working through trying to access a C DLL from VB.NET. I've read many online postings, but I'm still having problems. Now, my error is the "Attempted to read or write protected memory" error. Here's my Structure declaration:
[CODE=vbnet]<StructLayout(L ayoutKind.Seque ntial, charset:=CharSe t.Ansi)> _
Public Structure CONFIG_PARM
<MarshalAs(Unma nagedType.LPStr )> Public address1 As String
<MarshalAs(Unma nagedType.LPStr )> Public addrindex As String
<MarshalAs(Unma nagedType.LPStr )> Public cdrom As String
<MarshalAs(Unma nagedType.LPStr )> Public citystate As String
<MarshalAs(Unma nagedType.LPStr )> Public crossref As String
<MarshalAs(Unma nagedType.LPStr )> Public system As String
<MarshalAs(Unma nagedType.LPStr )> Public elot As String
<MarshalAs(Unma nagedType.LPStr )> Public elotindex As String
<MarshalAs(Unma nagedType.LPStr )> Public llkpath As String
<MarshalAs(Unma nagedType.LPStr )> Public ewspath As String
<MarshalAs(Unma nagedType.LPStr )> Public dpvpath As String
<MarshalAs(Unma nagedType.LPStr )> Public fnsnpath As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=124) > Public rsvd As String
End Structure
<StructLayout(L ayoutKind.Seque ntial, CharSet:=CharSe t.Ansi)> _
Public Structure Z4OPEN_PARM
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=50)> Public rsvd1 As String
<MarshalAs(Unma nagedType.I4)> Public status As Integer
<MarshalAs(Unma nagedType.LPStr )> Public fname As String
<MarshalAs(Unma nagedType.Struc t)> Public config As CONFIG_PARM
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public ewsflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public elotflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public llkflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public dpvflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public systemflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=511) > Public rsvd2 As String
End Structure[/CODE]
The Function declarations and the code used to call them are:
[CODE=vbnet] <DllImport("zip 4_w32.dll", CharSet:=CharSe t.Ansi)> _
Public Shared Function z4opencfgSTD(By Ref openparm As Z4OPEN_PARM) As Integer
End Function
...
Dim openparm As New Z4OPEN_PARM
Dim configparm As New CONFIG_PARM
Dim address1 As String = "e:\ams\ams_com m"
Dim addrindex As String = "e:\ams\ams_com m"
Dim citystate As String = "e:\ams\ams_com m"
Dim crossref As String = "e:\ams\ams_com m"
Dim fnsnpath As String = "e:\ams\ams_com m"
Dim elot As String = "e:\ams\ams_elo t"
Dim elotindex As String = "e:\ams\ams_elo t"
Dim llkpath As String = "e:\ams\lacslin k"
Dim dpvpath As String = "e:\ams\ams_dpv "
Dim systempath As String = "e:\projects\wr apz4\wrapz4\deb ug"
Dim ewspath As String = ""
Dim rsvd_string As New StringBuilder
Dim rsvd As String = ""
rsvd.PadLeft(12 4)
Dim rsvd1 As String = ""
rsvd1.PadLeft(5 0)
Dim rsvd2 As String = ""
rsvd2.PadLeft(5 11)
Dim cdrom As String = ""
Dim fname As String = ""
configparm.addr ess1 = address1
configparm.addr index = addrindex
configparm.cdro m = cdrom
configparm.city state = citystate
configparm.cros sref = crossref
configparm.syst em = systempath
configparm.elot = elot
configparm.elot index = elotindex
configparm.llkp ath = llkpath
configparm.ewsp ath = ewspath
configparm.dpvp ath = dpvpath
configparm.fnsn path = fnsnpath
configparm.rsvd = rsvd
openparm.status = 2
openparm.rsvd1 = rsvd1
openparm.rsvd2 = rsvd2
openparm.elotfl ag = "Y"
openparm.llkfla g = "Y"
openparm.ewsfla g = "N"
openparm.dpvfla g = "Y"
openparm.system flag = "Y"
openparm.fname = fname
openparm.config = configparm
Connection.Text = z4functions.z4o pencfgSTD(openp arm)[/CODE]
Why would I be getting the memory error, "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."?
Thanks for your help.
[CODE=vbnet]<StructLayout(L ayoutKind.Seque ntial, charset:=CharSe t.Ansi)> _
Public Structure CONFIG_PARM
<MarshalAs(Unma nagedType.LPStr )> Public address1 As String
<MarshalAs(Unma nagedType.LPStr )> Public addrindex As String
<MarshalAs(Unma nagedType.LPStr )> Public cdrom As String
<MarshalAs(Unma nagedType.LPStr )> Public citystate As String
<MarshalAs(Unma nagedType.LPStr )> Public crossref As String
<MarshalAs(Unma nagedType.LPStr )> Public system As String
<MarshalAs(Unma nagedType.LPStr )> Public elot As String
<MarshalAs(Unma nagedType.LPStr )> Public elotindex As String
<MarshalAs(Unma nagedType.LPStr )> Public llkpath As String
<MarshalAs(Unma nagedType.LPStr )> Public ewspath As String
<MarshalAs(Unma nagedType.LPStr )> Public dpvpath As String
<MarshalAs(Unma nagedType.LPStr )> Public fnsnpath As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=124) > Public rsvd As String
End Structure
<StructLayout(L ayoutKind.Seque ntial, CharSet:=CharSe t.Ansi)> _
Public Structure Z4OPEN_PARM
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=50)> Public rsvd1 As String
<MarshalAs(Unma nagedType.I4)> Public status As Integer
<MarshalAs(Unma nagedType.LPStr )> Public fname As String
<MarshalAs(Unma nagedType.Struc t)> Public config As CONFIG_PARM
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public ewsflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public elotflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public llkflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public dpvflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=1)> Public systemflag As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=511) > Public rsvd2 As String
End Structure[/CODE]
The Function declarations and the code used to call them are:
[CODE=vbnet] <DllImport("zip 4_w32.dll", CharSet:=CharSe t.Ansi)> _
Public Shared Function z4opencfgSTD(By Ref openparm As Z4OPEN_PARM) As Integer
End Function
...
Dim openparm As New Z4OPEN_PARM
Dim configparm As New CONFIG_PARM
Dim address1 As String = "e:\ams\ams_com m"
Dim addrindex As String = "e:\ams\ams_com m"
Dim citystate As String = "e:\ams\ams_com m"
Dim crossref As String = "e:\ams\ams_com m"
Dim fnsnpath As String = "e:\ams\ams_com m"
Dim elot As String = "e:\ams\ams_elo t"
Dim elotindex As String = "e:\ams\ams_elo t"
Dim llkpath As String = "e:\ams\lacslin k"
Dim dpvpath As String = "e:\ams\ams_dpv "
Dim systempath As String = "e:\projects\wr apz4\wrapz4\deb ug"
Dim ewspath As String = ""
Dim rsvd_string As New StringBuilder
Dim rsvd As String = ""
rsvd.PadLeft(12 4)
Dim rsvd1 As String = ""
rsvd1.PadLeft(5 0)
Dim rsvd2 As String = ""
rsvd2.PadLeft(5 11)
Dim cdrom As String = ""
Dim fname As String = ""
configparm.addr ess1 = address1
configparm.addr index = addrindex
configparm.cdro m = cdrom
configparm.city state = citystate
configparm.cros sref = crossref
configparm.syst em = systempath
configparm.elot = elot
configparm.elot index = elotindex
configparm.llkp ath = llkpath
configparm.ewsp ath = ewspath
configparm.dpvp ath = dpvpath
configparm.fnsn path = fnsnpath
configparm.rsvd = rsvd
openparm.status = 2
openparm.rsvd1 = rsvd1
openparm.rsvd2 = rsvd2
openparm.elotfl ag = "Y"
openparm.llkfla g = "Y"
openparm.ewsfla g = "N"
openparm.dpvfla g = "Y"
openparm.system flag = "Y"
openparm.fname = fname
openparm.config = configparm
Connection.Text = z4functions.z4o pencfgSTD(openp arm)[/CODE]
Why would I be getting the memory error, "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."?
Thanks for your help.
Comment