Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET / 10 сообщений из 10, страница 1 из 1
05.04.2006, 10:30
    #33645346
Efim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
Может кто использовал DLL Плахова/Покаташкина для склонения ФИО ( ссылка здесь )?

Пытаюсь сделать склонение в программе на VB - не получается - выдается ошибка, что недопустимое значение падежа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    Private Declare Function GetPadeg Lib "Padeg.dll" Alias "GetFIOPadegFS" _
      (ByVal pFIO As String, ByVal bsex As Boolean, ByRef nPadeg As Long, _
      ByVal pResult As String, ByRef nLen As Long) As Integer

    Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Long, ByVal bsex As Boolean) As String
        Dim tmpS As String
        Dim nLen As Long =  250 
        Dim RetVal As Long
        If Len(cFIO) =  1  Then
            MakePadeg = - 2 
            Exit Function
        End If
        tmpS = StrDup( 250 , Chr( 0 ))
        RetVal = GetPadeg(cFIO, bsex, nPadeg, tmpS, nLen) ' у меня в любом случае возвращается -1
        If RetVal = - 1  Then MsgBox("Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО")
        MakePadeg = Mid(tmpS,  1 , nLen)
    End Function
Вот, как вызываю:
Код: plaintext
Me.TextBox2.Text = MakePadeg(Me.TextBox1.Text,  2 , True)

Практически то же самое для Excel работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Declare Function GetPadeg Lib "d:\Padeg.dll" Alias "GetFIOPadegFS" _
  (ByVal pFIO As String, ByVal bsex As Boolean, ByVal nPadeg As Long, _
  ByVal pResult As String, ByRef nLen As Long) As Integer

Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Long, ByVal bsex As Boolean) As String
Dim tmpS As String
Dim nLen As Long
Dim RetVal As Integer
  If Len(cFIO) =  1  Then Exit Function
  tmpS = String( 255 ,  0 )
  RetVal = GetPadeg(cFIO, bsex, nPadeg, tmpS, nLen)
  If RetVal = - 1  Then MsgBox "Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО"
  MakePadeg = Mid(tmpS,  1 , nLen)
End Function

Может, кто-нибудь знает, что делать?
Спасибо.
...
Рейтинг: 0 / 0
05.04.2006, 10:39
    #33645386
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
ByRef nPadeg As Long
на
ByVal nPadeg As Long
заменить не пробовал?
Шайтан
...
Рейтинг: 0 / 0
05.04.2006, 10:56
    #33645464
Efim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
ШайтанByRef nPadeg As Long
на
ByVal nPadeg As Long
заменить не пробовал?

Если заменяю "ByRef nPadeg As Long" на "ByVal nPadeg As Long" , то при вызове функции получаю ошибку -
A call to PInvoke function 'Padeg_appl_vb!Padeg_appl_vb.Form1::GetPadeg' 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.

Если затем еще меняю "tmpS = StrDup(250, Chr(0))" на "tmpS = StrDup(250, Chr(32))" (заполнение пробелами), то получаю Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
...
Рейтинг: 0 / 0
05.04.2006, 11:08
    #33645525
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
Переменные, которые ты создаёшь у себя в фнкции для передачи в dll на позиции Long, определяй как Integer или как System.Int32 !
Шайтан
...
Рейтинг: 0 / 0
05.04.2006, 11:19
    #33645569
Efim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
ШайтанПеременные, которые ты создаёшь у себя в фнкции для передачи в dll на позиции Long, определяй как Integer или как System.Int32 !

СПАСИБО!!! :) Все получилось!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.05.2011, 17:54
    #37248119
Jiemn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
помогите плиз

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 Private Declare Function GetPadeg Lib "Padeg.dll" Alias "GetFIOPadegFSAS" _
       (ByVal pFIO As String, ByRef nPadeg As Long, _
       ByVal pResult As String, ByRef nLen As Long) As Integer

    Public Function MakePadeg(ByVal cFIO As String) As String
        Dim tmpS As String
        Dim nLen As Integer =  250 
        Dim RetVal As Integer
        If Len(cFIO) =  1  Then
            MakePadeg = - 2 
            Exit Function
        End If
        tmpS = StrDup( 250 , Chr( 0 ))
        RetVal = GetPadeg(cFIO, CInt( 2 ), tmpS, nLen) ' у меня в любом случае возвращается -1
        If RetVal = - 1  Then MsgBox("Недопустимое значение падежа - " & "(" &  2  & ")", , "Склонение ФИО")
        MakePadeg = Mid(tmpS,  1 , nLen)
    End Function

Все тоже выводит ошибку...хотя все сделал как говорил Шайтан
...
Рейтинг: 0 / 0
11.05.2011, 11:06
    #37254374
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
Dim nLen As Long = 250
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
24.04.2014, 09:58
    #38624029
vOOFka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
На всякий случай выкладываю рабочий пример на vb.net

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Declare Function GetPadeg Lib "Padeg.dll" Alias "GetFIOPadegFSAS" _
           (ByVal pFIO As String, ByVal nPadeg As Int32, _
           ByVal pResult As String, ByRef nLen As Int32) As Integer

    ' Функция преобразования cFIO в падеж nPadeg
    Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Int32) As String
        Dim tmpS As String
        Dim nLen As Integer = 250
        Dim RetVal As Integer
        If Len(cFIO) = 1 Then
            MakePadeg = -2
            Exit Function
        End If
        tmpS = StrDup(250, Chr(0))
        RetVal = GetPadeg(cFIO, nPadeg, tmpS, nLen)
        If RetVal = -1 Then MsgBox("Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО")
        MakePadeg = Mid(tmpS, 1, nLen)
    End Function



Вызывать так
Код: vbnet
1.
TextBox2.Text = MakePadeg(TextBox1.Text, n)

где n от 0-6
...
Рейтинг: 0 / 0
01.06.2014, 16:02
    #38658031
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
Подскаите возникли проблемы при использовании данной функции в Access 2013.

Access библиотеку видит, обращение к ней идёт, но функция назад ничего не возвращает.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Private Declare Function GetPadeg Lib "D:\YandexDisk\Работа\access\Лабпроверка\Padeg.dll" Alias "GetFIOPadegFSAS" _
           (ByVal pFIO As String, ByVal nPadeg As Integer, _
           ByVal pResult As String, ByRef nLen As Integer) As Integer
' Функция преобразования cFIO в падеж nPadeg
Public Function MakePadeg(ByVal cFIO As String, _
                          ByVal nPadeg As Integer) As String
Dim tmpS As String
Dim nLen As Integer
Dim RetVal As Integer
  nLen = 255
  tmpS = String(nLen, 0)
  RetVal = GetPadeg(cFIO, nPadeg, tmpS, nLen)
  If RetVal = -1 Then MsgBox "Недопустимое значение падежа - " & _
                             "(" & nPadeg & ")", , "Склонение"
  MakePadeg = Mid(tmpS, 1, nLen)
  Debug.Print MakePadeg
End Function

Function my()
Debug.Print MakePadeg("Лосев Сергей Викторович", 5)
End Function



просто в растеренности, буду признателен за любую помощь
...
Рейтинг: 0 / 0
01.06.2014, 16:46
    #38658046
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET
Сергей_Лосев,

ты в профильной ветке лучше задай вопрос (по Access'у)
например, лично я не помню уже, как в этом продукте подключать библиотеки :))
имхо дело в подключении
иди в ветку по Access'у
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Падежи ФИО из DLL (Плахов, Покаташкин) в программе на VB.NET / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]