Страница: 1 |
кто нибудь обьяснит мне русским и понятным языком эту хрень. ******** In Visual Basic 6.0, user-defined types could be passed as an argument in a Declare statement for a Windows API. ' After upgrade to Visual Basic .NET ************* обьявляю Public валится на Call WSAStartup(&H101S, lpWSAdata) thanks...
Перевод В VisualBasic 6.0, пользовательские типы данных могут быть использованы в качестве аргументов при объявлении Windows API функций. В VisualBasic.Net, структуры (пользовательские типы данных) использующиеся в качестве аргументов, при объявлении WinAPI ,могут потребовать дополнительные атрибуты marshaling( то бишь те которые в <>кавычки вставленны), для правильной интерпритации их внешними функциями и процедурамию. В частности массивы и строки фиксированной длины могут неправильно функционировать при отсутствии этих атрибутов. Далее идет пример.... То есть, при конвертации проектов VB.6 на VB.NET нужно учитывать тот факт, что пользовательские типы данных, при обявлении API функций, должны иметь соответствующие атрибуты<……>, например для строк фиксированной длинны, которые ноне не поддерживаеть. Трудновато будет тебе без знаний Английсгого. Тогда как правильно обьявить структуру WSAdata для вызова API функции WSAstartup ????? с английским у меня все ок. просто не могу врубиться в ету технологию с атрибутами А можно поподробней о структуре WSAdata? Скорее всего не понял типы данных составляющих структуру. Страница: 1 |
Вопрос: Pomogite!
Добавлено: 05.02.04 17:33
Автор вопроса: gsergey
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
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
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
VladDor
Вопросов: 17
Ответов: 47
Профиль | | #1
Добавлено: 06.02.04 11:18
Номер ответа: 2
Автор ответа:
gsergey
Вопросов: 7
Ответов: 3
Профиль | | #2
Добавлено: 06.02.04 17:06
Номер ответа: 3
Автор ответа:
VladDor
Вопросов: 17
Ответов: 47
Профиль | | #3
Добавлено: 10.02.04 10:58