Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Pomogite! Добавлено: 05.02.04 17:33  

Автор вопроса:  gsergey

кто нибудь обьяснит мне русским и понятным языком эту хрень.

********

In Visual Basic 6.0, user-defined types could be passed as an argument in a Declare statement for a Windows API.
In Visual Basic .NET, a structure (user-defined type) passed as an argument in a Declare statement may require additional marshalling attributes in order to be passed correctly to the external function or subroutine. In particular, arrays and fixed-length strings may not function as expected without these attributes.
The following example shows a structure before and after upgrade:
' Visual Basic 6.0 code
Type MyType
   s As String * 100
End Type

' After upgrade to Visual Basic .NET
Structure MyType
   <VBFixedString(100), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=100)> Public s As String
End Structure
What to do next
Add an Imports statement to reference the InteropServices namespace:
Imports System.Runtime.InteropServices
Modify the structure and the string declaration to include marshalling attributes, as in the following example:
' Modified code
<StructLayout( LayoutKind.Sequential, CharSet:=CharSet.ANSI)>Structure MyType
   <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=100)> Public s As String
End Structure

*************

обьявляю

Public Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequired As Integer, ByRef lpWSAdata As WSAdata) As Integer

валится на

Call WSAStartup(&H101S, lpWSAdata)

thanks...


 

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 VladDor



Вопросов: 17
Ответов: 47
 Профиль | | #1 Добавлено: 06.02.04 11:18

Перевод

В VisualBasic 6.0, пользовательские типы данных могут быть использованы в качестве аргументов при объявлении Windows API функций.

В VisualBasic.Net, структуры (пользовательские типы данных) использующиеся в качестве аргументов, при объявлении WinAPI ,могут потребовать дополнительные атрибуты marshaling( то бишь те которые в <>кавычки вставленны), для правильной интерпритации их внешними

функциями и процедурамию.

В частности массивы и строки фиксированной длины могут неправильно функционировать при отсутствии этих атрибутов.

Далее идет пример....

То есть, при конвертации проектов VB.6 на VB.NET нужно учитывать тот факт, что пользовательские типы данных, при обявлении API функций, должны иметь соответствующие атрибуты<……>, например для строк фиксированной длинны, которые

ноне не поддерживаеть.

Трудновато будет тебе без знаний Английсгого.

Ответить

Номер ответа: 2
Автор ответа:
 gsergey



Вопросов: 7
Ответов: 3
 Профиль | | #2 Добавлено: 06.02.04 17:06

Тогда как правильно обьявить структуру

WSAdata

для вызова API функции

WSAstartup

?????

с английским у меня все ок. просто не могу врубиться в ету технологию с атрибутами

Ответить

Номер ответа: 3
Автор ответа:
 VladDor



Вопросов: 17
Ответов: 47
 Профиль | | #3 Добавлено: 10.02.04 10:58

А можно поподробней о структуре WSAdata? Скорее всего не понял типы данных составляющих структуру.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам