Объявите и <DllImport>в VB.NET имеют разные результаты - PullRequest
1 голос
/ 25 июня 2010

Я пытался вызвать метод входа неуправляемой библиотеки DLL.

Если я использую объявить, логин не удастся.

Private Declare Function Login Lib "dllCore" (ByVal lpName As String, ByVal lpPassword As String) As Int32

Login ("Steve", "123456") ' THIS FAILS TO LOGIN ALTHOUGH THE PARAMS ARE CORRECT

Если я использую DllImport, он работает !!

    <DllImport("dllCore.dll", 
                EntryPoint:="Login", 
                SetLastError:=True, 
                CharSet:=CharSet.Unicode, 
                ExactSpelling:=True, 
                CallingConvention:=CallingConvention.StdCall)> 
        Private Function Login(ByVal username As String, ByVal password As String) As Integer
        End Function

Login ("Steve", "123456") ' NOW WORKS 

У кого-нибудь есть идеи, почему я так поступаю ??

1 Ответ

1 голос
/ 19 декабря 2011

Набор символов по умолчанию для оператора Declare - Ansi.Вам необходимо установить кодировку в Unicode для правильного соответствия DllImport.

Private Declare Unicode Function Login Lib "dllCore" (ByVal lpName As String, ByVal lpPassword As String) As Int32

Документация MSDN для оператора Declare

...