By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,969 Members | 1,522 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,969 IT Pros & Developers. It's quick & easy.

WNetAddConnection2 call: "PInvokeStackImbalance was detected"

P: n/a

I'm getting this message in Visual Studio 2005:
PInvokeStackImbalance was detected

Message: A call to PInvoke function
'Refresh!Refresh.Main::WNetAddConnection2' has unbalanced the stack.

This is likely because the managed PInvoke signature does not match
the unmanaged target signature. Check that the calling convention
and parameters of the PInvoke signature match the target unmanaged
signature.

My goal is to connect to a remote filesystem. I don't want to
create a mapping to the filesystem. I just want to connect using the
login name and password that I already have. The web sites that I
googled around at stated that WNetAddConnection2() could be used for
this purpose, particularly

<http://groups.google.com/group/micro...works/browse_t
hread/thread/f61e50f43601670b/005f911e0da84edc?lnk=st&q=LOGON+VPN+VB&rnum=7&
hl=en#>

The code in question is this:
' dwFlags values.
Private Const CONNECT_UPDATE_PROFILE As Long = &H1
Private Const CONNECT_INTERACTIVE As Long = &H8
Private Const CONNECT_PROMPT As Long = &H10

' dwType values.
Private Const RESOURCETYPE_ANY As Long = &H0
Private Const RESOURCETYPE_DISK As Long = &H1
Private Const RESOURCETYPE_PRINT As Long = &H2
Private Const RESOURCETYPE_RESERVED As Long = &H8
Private Const RESOURCETYPE_UNKNOWN As Long = &HFFFFFFFF

' dwScope values.
Private Const RESOURCE_CONNECTED As Long = &H1
Private Const RESOURCE_GLOBALNET As Long = &H2
Private Const RESOURCE_REMEMBERED As Long = &H3
Private Const RESOURCE_RECENT As Long = &H4
Private Const RESOURCE_CONTEXT As Long = &H5

' dwDisplayType values.
Private Const RESOURCEDISPLAYTYPE_DOMAIN As Long = &H1
Private Const RESOURCEDISPLAYTYPE_GENERIC As Long = &H0
Private Const RESOURCEDISPLAYTYPE_SERVER As Long = &H2
Private Const RESOURCEDISPLAYTYPE_SHARE As Long = &H3

Private Const RESOURCEUSAGE_CONNECTABLE As Long = &H1
Private Const SW_SHOWNORMAL As Long = 1

Private Declare Function WNetAddConnection2 Lib "mpr.dll" _
Alias "WNetAddConnection2A" _
(ByVal lpNetResource As NETRESOURCE, _
ByVal lpPassword As String, _
ByVal lpUserName As String, _
ByVal dwFlags As Long) As Long

' The examples used Private Type but Visual Studio complained
' and said that Structure was now preferred.

Private Structure NETRESOURCE
Dim dwScope As Long
Dim dwType As Long
Dim dwDisplayType As Long
Dim dwUsage As Long
Dim lpLocalName As String
Dim lpRemoteName As String
Dim lpComment As String
Dim lpProvider As String
End Structure
' Function code here.
Dim netstruct As New NETRESOURCE
Dim errcode As Long

With netstruct
.dwScope = RESOURCE_GLOBALNET
.dwType = RESOURCETYPE_ANY
.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
.dwUsage = RESOURCEUSAGE_CONNECTABLE
.lpRemoteName = backup_base_dir
.lpLocalName = vbNullString
.lpProvider = vbNullString
End With

errcode = WNetAddConnection2(netstruct, _
strLogPass, strLogName, _
CONNECT_INTERACTIVE Or CONNECT_UPDATE_PROFILE)

Am I using contradictory options? Or am I using the wrong function
to begin with?

Thanks,

--
-john

February 28 1997: Last day libraries could order catalogue cards
from the Library of Congress.
Jun 8 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
"John M. Gamble" <jg*****@ripco.comschrieb:
I'm getting this message in Visual Studio 2005:
PInvokeStackImbalance was detected

Message: A call to PInvoke function
'Refresh!Refresh.Main::WNetAddConnection2' has unbalanced the stack.

[...]
I assume you took the sample from a VB6 projekt or code repository. Note
that VB 2005 is not a technical successor of VB6 and code is generally not
compatible between the two programming languages. Whereas 'Long' was a
32-bit data type in VB6, it's a 64-bit type in VB.NET. Thus you'll have to
modify your declarations, constants, and structures accordingly (this means,
changing 'Long' to 'Integer' or 'Int32', with some exceptions). Note that
some additional modifications of the source code may be necessary in order
to make the code work.

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Jun 8 '07 #2

P: n/a
In article <uw**************@TK2MSFTNGP06.phx.gbl>,
Herfried K. Wagner [MVP] <hi***************@gmx.atwrote:
>"John M. Gamble" <jg*****@ripco.comschrieb:
>I'm getting this message in Visual Studio 2005:
PInvokeStackImbalance was detected

Message: A call to PInvoke function
'Refresh!Refresh.Main::WNetAddConnection2' has unbalanced the stack.

[...]

I assume you took the sample from a VB6 projekt or code repository. Note
Hmm. The claim was that it was from a dotnet source, but given the other
change I had to make I am suspicious.
>that VB 2005 is not a technical successor of VB6 and code is generally not
compatible between the two programming languages. Whereas 'Long' was a
32-bit data type in VB6, it's a 64-bit type in VB.NET. Thus you'll have to
modify your declarations, constants, and structures accordingly (this means,
changing 'Long' to 'Integer' or 'Int32', with some exceptions). Note that
some additional modifications of the source code may be necessary in order
to make the code work.
Thanks, I'll start with that.

--
-john

February 28 1997: Last day libraries could order catalogue cards
from the Library of Congress.
Jun 8 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.