Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213

Срочно - стринги и вызов Win32 API функций (.NET)

27.06.2012, 15:16. Показов 2327. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я новичек в VB.NET.

В VB6 можно было декларировать стринг как
Visual Basic
1
Dim strDirectory as String * 256
и потом передать в API функцию декларированную как
Visual Basic
1
2
3
Private Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" ( _
                                ByVal hConnect As Integer, ByRef sCurrentDirectory As String, _
                                ByRef dwCurrentDirectory As Integer) As Boolean
после чего вызов выглядит как
Visual Basic
1
FtpGetCurrentDirectory(hConnect, strDirectory, dwDirLen )
Теперь же, в .NET декларация функции выглядит так
VB.NET
1
2
3
Private Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" ( _
                                ByVal hConnect As Integer, ByVal sCurrentDirectory As System.Text.StringBuilder, _
                                ByRef dwCurrentDirectory As Integer) As Boolean
а вызов так
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim strPath As String, dwCount As Integer = 1024, bRes As Boolean
Dim strBuilder As New System.Text.StringBuilder(dwCount)
 
   If (Connected) Then
       bRes = _FtpGetCurrentDirectory(m_hSession, strBuilder, dwCount)
       If (bRes = False) Then
           strPath = Nothing
       Else
           strPath = strBuilder.ToString()
       End If
 
   Else
       strPath = Nothing
   End If
Это более запутанно, но еще понятно. Но в следующем случае я не понимаю как мне декларировать структуру, чтобы вызов API был правильным:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" ( _
                                ByVal hConnect As Integer, ByVal sSearchFile As String, _
                                ByRef findFileData As WIN32_FIND_DATA, ByVal dwFlags As Integer, _
                                ByVal dwContext As Integer) As Integer
 
    Private Structure WIN32_FIND_DATA
        Dim dwFileAttributes As Integer
        Dim ftCreationTime As System.Runtime.InteropServices.ComTypes.FILETIME
        Dim ftLastAccessTime As System.Runtime.InteropServices.ComTypes.FILETIME
        Dim ftLastWriteTime As System.Runtime.InteropServices.ComTypes.FILETIME
        Dim nFileSizeHigh As Integer
        Dim nFileSizeLow As Integer
        Dim dwReserved0 As Integer
        Dim dwReserved1 As Integer
        <VBFixedString(256)> Dim cFileName As String
        <VBFixedString(14)> Dim cAlternateFileName As String
    End Structure
 
...
 
   Dim winFileData As WIN32_FIND_DATA, strFileName As String = Nothing
   Dim hDirConnect As Integer
 
   hDirConnect = FtpFindFirstFile(m_hSession, "", winFileData, 0, 0)      <--- Здесь происходит ексепшион
Как я понял, проблема в декларации стрингов в структуре. Я пробовал декларировать их и как обычный стринг, и как
System.Text.StringBuilder, но ничего не помогает. (тип ошибок при различных декларациях разный, но результат тот же).

Вопрос: как в .NET декларируются структуры со стрингами для последующей передачи их в Win32 API функции для заполнения полей?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2012, 15:16
Ответы с готовыми решениями:

Срочно - стринги и вызов Win32 API функций
Ответ на первоначальный вопрос найден с помощью Messir-a. Ключевыми словами тут является декларирование стринга в структуре с...

Вызов API функций в VB.NET
Такая у меня проблемка: Подскажите, кто сталкивался. Пробую пользоваться библиотекой p2smon.dll (Crystal Reports) для создания TTX файла...

Win32 API vs MFC vs .NET
Что это такое, чем они отличаются и что сейчас лучше учить?

4
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
27.06.2012, 16:18
kpoxa,
Я нашел чью-то дискуссию на схожую тему:

Hello all,

I am having some trouble using wininet.dll fot FTP in VB.NET. Here is my code:


CODE
Module Module1

Private Structure FILETIME
Dim dwLowDateTime As Long
Dim dwHighDateTime As Long
End Structure

Private Structure WIN32_FIND_DATA
Dim dwFileAttributes As Long
Dim ftCreationTime As FILETIME
Dim ftLastAccessTime As FILETIME
Dim ftLastWriteTime As FILETIME
Dim nFileSizeHigh As Long
Dim nFileSizeLow As Long
Dim dwReserved0 As Long
Dim dwReserved1 As Long
Dim cFileName As String
Dim cAlternate As String
End Structure

Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal HINet As Integer) As Integer
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Integer) As Integer
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Integer, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Integer, ByVal lFlags As Integer, ByVal lContext As Integer) As Integer
Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Integer, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Integer, ByVal dwFlags As Integer, ByVal dwContext As Integer) As Boolean
Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hFtpSession As Integer, ByVal lpszLocalFile As String, ByVal lpszRemoteFile As String, ByVal dwFlags As Integer, ByVal dwContext As Integer) As Boolean
Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, ByVal lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long
Private Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" (ByVal hFind As Long, ByVal lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszCurrentDirectory As String, ByVal lpdwCurrentDirectory As Long) As Long

Sub Main()
Dim INet As Long
Dim INetConn As Long
Dim RC As Boolean
Dim FileData As WIN32_FIND_DATA
Dim FileList As String
Dim MAX_PATH As Long = 0

INet = InternetOpen("FTP_Backup", 1, vbNullString, vbNullString, 0)
INetConn = InternetConnect(INet, "my.ftp.server.name", 0, "MyUsername", "MyPassword", 1, 0, 0)
RC = FtpGetFile(INetConn, "/notes.ini", "D:TempVB .NET TempNotes Data
otes.ini", False, 0, 0, 0)

If RC Then Console.WriteLine("Transferred Notes.ini")

RC = FtpSetCurrentDirectory(INetConn, "/Data/mail")
MsgBox(RC)

RC = FtpGetCurrentDirectory(INetConn, FileList, MAX_PATH)


MsgBox(MAX_PATH)
MsgBox(FileList)

FileData.cFileName = New String("", 0, MAX_PATH)

RC = FtpFindFirstFile(INetConn, "*.*", FileData, 0, 0)

MsgBox(RC)

FileList = FileData.cFileName & ","

'Do While RC = True
' RC = InternetFindNextFile(INetConn, FileData)
'
0
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
27.06.2012, 19:35  [ТС]
Те решения, что здесь приведены, я и так уже нашел (см. в моем коде), но я не нашел решения проблемы для структуры, а именно там и происходит ошибка на котороя я застопорился, если можно помощи именно со структурой и передачей её в WinAPI (в моем случае вызов FtpFindFirstFile ).
0
Messir
27.06.2012, 22:21
Цитата Сообщение от kpoxa
Те решения, что здесь приведены, я и так уже нашел (см. в моем коде), но я не нашел решения проблемы для структуры, а именно там и происходит ошибка на котороя я застопорился, если можно помощи именно со структурой и передачей её в WinAPI (в моем случае вызов FtpFindFirstFile ).
http://pinvoke.net/default.asp... dFirstFile
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
28.06.2012, 14:36  [ТС]
Спасибо, messir. Это именно то, что нужно (впрочем, как и все твои тветы :o) )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2012, 14:36
Помогаю со студенческими работами здесь

описание функций Win32 API получение имени компьютере GetComputerName
Задание: Написать и отладить консольную программу на языке ассемблера. Функция :Win32 API получение имени компьютере GetComputerName. не...

Вызов API функций
Как вызывать в C# API функции, например вот эту BOOL CALLBACK MonitorEnumProc( __in HMONITOR hMonitor, __in HDC hdcMonitor, ...

Вызов функций Windows API в HomeLisp 1.13.51
Как реализовать вызов функций Windows API из программ на HomeLisp версии 1.13.51? Если возможно, приведите пример работы с функцией...

Прямой вызов функций ODBC API
Есть код: //(SQLDataSources) typedef SQLRETURN (__import * _ODBCDataSources(SQLHENV EnvironmentHandle, ...

Вызов функций RASDIAL RASEnumConnections RASHangUp с API.
Как вызвать из VB следующие API-функции: RASDIAL RASEnumConnections RASHangUp и другие для того, чтобы написать полнофункциональный...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru