Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
Заблокирован
1

Запуск функций из DLL - Необработанное исключение типа "System.AccessViolationException" в WindowsApplication1

19.10.2015, 14:46. Показов 1487. Ответов 4
Метки нет (Все метки)

Здравия всем!

Сможет ли кто-нить объяснить нубу, как запустить этот код из VB6
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit
Private Type ODBSYS
  nAddinfo As Integer           ' additional information
  nMax_axis As Integer          ' maximum axis number
  sCnc_type As String * 2       ' cnc type <ascii char>
  sMt_type As String * 2        ' M/T/TT <ascii char>
  sSeries As String * 4         ' series NO. <ascii char>
  sVersion As String * 4        ' version NO.<ascii char>
  sAxes As String * 2           ' axis number<ascii char>
End Type
 
Private Declare Function cnc_allclibhndl3 Lib "fwlib32.dll" (ByVal sIPaddr As String, ByVal nPort As Integer, ByVal nTimeout As Long, FlibHndl As Integer) As Integer
Private Declare Function cnc_sysinfo Lib "fwlib32.dll" (ByVal FlibHndl As Integer, odb As ODBSYS) As Integer
 
Private Sub Form_Load()
Dim Handle As Integer
Dim I As Integer
I = cnc_allclibhndl3("192.168.20.231", 8193, 1, Handle)
Dim sys As ODBSYS
I = cnc_sysinfo(Handle, sys)
End Sub
в VB.NET?

Попробовал так -
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Imports System.Runtime.InteropServices
Public Class Form1
    Public Structure ODBSYS
        Public addinfo As Short
        Public max_axis As Short
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
        Public cnc_type As Char()
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
        Public mt_type As Char()
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
        Public series As Char()
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
        Public version As Char()
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
        Public axes As Char()
    End Structure
 
    Private Declare Function cnc_allclibhndl3 Lib "FWLIB32.DLL" (ByVal ip As String, ByVal port As Short, ByVal timeout As Integer, ByRef FlibHndl As Short) As Short
    Private Declare Function cnc_sysinfo Lib "FWLIB32.DLL" (ByVal FlibHndl As Short, odb As ODBSYS) As Short
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim h As Short, i As Short, odb As ODBSYS
        i = cnc_allclibhndl3("192.168.20.231", 8193, 1, h)
        i = cnc_sysinfo(h, odb)
    End Sub
End Class
Получил вот это-
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2015, 14:46
Ответы с готовыми решениями:

Необработанное исключение типа "System.IO.IOException" в Microsoft.VisualBasic.dll
Здравствуйте! Изучаю функции в Basic, и столкнулся с такой проблемой: при запуске данного...

Необработанное исключение типа "System.InvalidCastException" в Microsoft.VisualBasic.dll Дополнительные сведе
Dim a, b, eps As Double Dim z, z1 As String z = &quot;&quot; z1 = &quot;&quot; a =...

Необработанное исключение типа "System.Text.DecoderFallbackException"
При выполнении кода появляется ошибка Необработанное исключение типа...

Необработанное исключение типа "System.Net.WebException"
Доброго времени дня! Есть задача сохранять на сервере документы в формате htm, которые...

4
Заблокирован
19.10.2015, 15:37  [ТС] 2
Картинка пропала - вот она:
Миниатюры
Запуск функций из DLL - Необработанное исключение типа "System.AccessViolationException" в WindowsApplication1  
0
992 / 849 / 202
Регистрация: 29.09.2015
Сообщений: 980
19.10.2015, 21:03 3
Не могу протестировать код, т.к. нет библиотеки такой.

У вас в структуре(типы) четко указаны размеры переменных String*2 - 2 символа, String*4 - 4 символа и т.д. - это так простым языком, а так это выделения количества памяти для данных.
А вот указанный в вашей структуре (коде .net ) тип Char имеет размер под всего 1 символ

Visual Basic
1
2
3
4
5
6
7
8
9
Private Type ODBSYS
  nAddinfo As Integer           ' additional information
  nMax_axis As Integer          ' maximum axis number
  sCnc_type As String * 2       ' cnc type <ascii char>
  sMt_type As String * 2        ' M/T/TT <ascii char>
  sSeries As String * 4         ' series NO. <ascii char>
  sVersion As String * 4        ' version NO.<ascii char>
  sAxes As String * 2           ' axis number<ascii char>
End Type
Добавлено через 33 минуты
Только обратил внимание, что типы в виде размерных массивов... Но не уверен что это одно и тоже для работы не известно какой библиотеки
1
Администратор
Эксперт .NET
9197 / 4480 / 750
Регистрация: 17.04.2012
Сообщений: 9,276
Записей в блоге: 14
19.10.2015, 23:31 4
Лучший ответ Сообщение было отмечено Апострофф как решение

Решение

Апострофф, а не найдётся ли сигнатур этих функций на Сях?
Что заметил - в VB6 если не указано, параметр в функцию передаётся по ссылке? Если да, то вторую сигнатуру исправить на
VB.NET
1
Private Declare Function cnc_sysinfo Lib "FWLIB32.DLL" (ByVal FlibHndl As Short, ByRef odb As ODBSYS) As Short
2
Заблокирован
20.10.2015, 07:29  [ТС] 5
Спотыкаюсь об очевидные (как оказалось) грабли.
tezaurismosis, СПАСИБО за ByRef! Заработало вдруг
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2015, 07:29

Ошибка в чтении файла (Необработанное исключение типа "System.ArgumentException")
Дали пример программы. Я его напечатал. Запускаю, а мне выдает ошибку:

Инициализатор типа "WindowsApplication1.Module1" выдал исключение
День добрый, второй раз сталкиваюсь с такой проблемой: в один прекрасный момент Инициализатор...

Инициализатор типа "WindowsApplication1.ThemeXMLhandler" выдал исключение
При обращении к функции выдает ошибку ((( Вот код процедуры: Private Sub...

Необработанное исключение типа «System.IO.IOException» в mscorlib.dll при записи в файл
Try Dim sr As New IO.StreamReader(&quot;c:\system.txt&quot;) Dim line As String ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru