powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
24 сообщений из 24, страница 1 из 1
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38395285
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. int32,int16,integer,intPtr
VB6
Код: vbnet
1.
2.
3.
Public Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop _
 As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur _
 As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long


.NET
Код: vbnet
1.
2.
3.
  Public Declare Function DrawIconEx Lib "user32" (ByVal hdc As IntPtr, ByVal xLeft As Integer, _
   ByVal yTop As Integer, ByVal hIcon As IntPtr, ByVal cxWidth As Integer, ByVal cyWidth As Integer, _
   ByVal istepIfAniCur As Integer, ByVal hbrFlickerFreeDraw As IntPtr, ByVal diFlags As Integer) As Integer


Я для себя так понял:
hwnd, hdc, h<то-то>:
Long -> IntPtr
все остальное обычно
Long -> Integer (типа DWORD)
Или м.б. Int32? Как правильно? Вроде это одно и то же? Или не совсем? Компилирую все на XP 32-бит, работает естественно и на x64.
Integer - > Int 16 (типа WORD)
В MSDN естественно смотрю, когда переписываю.
Поправьте, как правильно.

2. Типы -> структуры
VB6
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
' DRAWITEMSTRUCT for ownerdraw
Private Type DRAWITEMSTRUCT
  CtlType As Long
  CtlID As Long
  itemID As Long
  itemAction As Long
  itemState As Long
  hwndItem As Long
  hdc As Long
  rcItem As RECT
  itemData As Long
End Type

.NET
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  ' DRAWITEMSTRUCT for ownerdraw
  Private Structure DRAWITEMSTRUCT
    Public CtlType As Integer
    Public CtlID As Integer
    Public itemID As Integer
    Public itemAction As Integer
    Public itemState As Integer
    Public hwndItem As IntPtr
    Public hdc As IntPtr
    Public rcItem As RECT
    Public itemData As IntPtr
  End Structure


Меня смущает Private в объявлении структуры, и
Public в объявлении элементов.

Без Public внутри не фурычит.
Public в объявлении структуры писать не рискую,
в VB6 по возможности делаю Private в Type (в модуле или форме).
Поясните.

3. В API часто встречается
Function "FunctionA" (ANSI)
Function "FunctionW" (Unicode)

В VB6 обычно декларирую как "FunctionA".
А какие рекомендации по поводу .NET?
Я так понимаю он на Юникод по умолчанию ориентирован.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38395375
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий772. Типы -> структуры
VB6
Код: vbnet
1.
2.
3.
4.
5.
6.
' DRAWITEMSTRUCT for ownerdraw
Private Type DRAWITEMSTRUCT
  CtlType As Long
  CtlID As Long
...
End Type

.NET
Код: vbnet
1.
2.
3.
4.
5.
6.
  ' DRAWITEMSTRUCT for ownerdraw
  Private Structure DRAWITEMSTRUCT
    Public CtlType As Integer
    Public CtlID As Integer
...
   End Structure


Меня смущает Private в объявлении структуры, и
Public в объявлении элементов.

Без Public внутри не фурычит.
Public в объявлении структуры писать не рискую,
в VB6 по возможности делаю Private в Type (в модуле или форме).
Поясните.
Сдается мне, что правильный "перевод" будет:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
  'vb.net
  ' DRAWITEMSTRUCT for ownerdraw
  Private Structure DRAWITEMSTRUCT
    Dim CtlType As Integer
    Dim CtlID As Integer
...
   End Structure


Не?
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38395903
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Не?А студия что на это говорит?
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38395975
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

1.1 Тип возвращаемого значения функции DrawIconEx лучше сделать Boolean.
1.2 Integer и System.Int32 это один и тот же тип.

2.1 К WinAPI структурам имеет смысл добавдять атрибут StructLayout чтобы .NET гарантировано не менял порядок полей в памяти.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<StructLayout(LayoutKind.Sequential)>
Friend Structure DRAWITEMSTRUCT
	Public CtlType As Integer
	Public CtlID As Integer
	Public itemID As Integer
	Public itemAction As Integer
	Public itemState As Integer
	Public hwndItem As IntPtr
	Public hdc As IntPtr
	Public rcItem As RECT
	Public itemData As IntPtr
End Structure


2.2 Я заменил модификатор Private на Friend т.к. скорее всего он здесь больше подходит. Это означает что DRAWITEMSTRUCT будет доступна всем типам в этой сборке, но не за ее пределами. На твоем месте я бы создал модуль где собрал бы все объявления функций и структур данных WinAPI чтобы не смешивать их с основным кодом.

2.3 Модификатор на уровне структуры указывает права доступа других типов из этой и других сборок. Модификатор на уровне класса/структуры устанавливает права доступа для всех внешних потребителей. Private поле доступно только внутри самого типа.

3. .NET автоматически использует Unicode версию WinAPI функции поэтому указывать суффикс нет нужды. Тем более что многие *A функции вызывают *W версию что только добавляет лишние накладные расходы.

P.S. Ты переходишь на .NET с VB6 и отсюда привычка полагаться на WinAPI. В .NET многие вещи уже реализуются собственными классами и зачастую нет никакой необходимости вызывать WinAPI. Например, для вывода иконки можно использовать класс PictureBox или Graphics . Если аналог WinAPI отсутствует, то смотри как их нужно объявлять на сайте pinvoke.net .
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38396420
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,
буду переваривать потихоньку.

Сразу вопрос:
bazile...Например, для вывода иконки можно использовать класс PictureBox или Graphics .

Контекст:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
      Case WM_DRAWITEM
        Debug.WriteLine("WM_DRAWITEM")
        dm = CType(Marshal.PtrToStructure(m.LParam, GetType(DRAWITEMSTRUCT)), DRAWITEMSTRUCT)
        If dm.CtlType = ODT_MENU Then
...
          If InStr(menu_caption, "&New...") > 0 Then
            lngIcon = (IIf(item_disabled, My.Resources.CONTACT_NEWBW.Handle, _
                                          My.Resources.CONTACT_NEW.Handle))
          ElseIf InStr(menu_caption, "&Edit...") > 0 Then
            lngIcon = (IIf(item_disabled, My.Resources.CONTACT_EDITBW.Handle, _
                                          My.Resources.CONTACT_EDIT.Handle))
          If lngIcon <> 0 Then
            DrawIconEx(dm.hdc, _
             dm.rcItem.Left - 16, _
             dm.rcItem.Top + (dm.rcItem.Bottom - dm.rcItem.Top - 16) / 2, _
             lngIcon, 16, 16, _
             0, 0, DI_NORMAL)
          End If



Совсем без API я тут не могу, это MainMenu(NET) а не MenuStrip (не хочу т.к. отсутствует поддержка родных Vista-стилей).
Я пытался придумать с Graphics, но ничего не придумал.
На что заменить DrawIconEx?
Рисовать надо на hdc
.
А я так понимаю с hdc в .NET что-то не очень.
(конкретно момент с рисовкой иконки на hdc вместо DrawIconEx)
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38396485
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, вместо этого кода лучше написать обработчик события MenuItem.DrawItem. Ему передается аргумент типа DrawItemEventArgs с полем Graphics у которого есть метод DrawIcon.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38396512
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77А я так понимаю с hdc в .NET что-то не очень.
Код: vbnet
1.
hdc = GetDC(hWnd)
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38396579
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            IntPtr hdc =e.Graphics.GetHdc();
        }
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38396919
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Изопропил,
вы не смотрели мой код (API-шный), там hdc уже есть
как элемент dm as DRAWITEMSTRUCT
Про GetHdc (например формы) я прочитал и это уже проделал (и кстати не надо забывать про ReleaseDC - и в .Net тоже -Antonariy сам когда-то обратил мое внимание на это).
Вопрос в этом контексте был задан Как нарисовать на hdc вместо DrawIconEx, т.е. .Net методами (hdc искать не надо, оно уже известно).

Полностью правильный совет (с т.зр. что это .Net) конечно вот этот:
bazileДмитрий77, вместо этого кода лучше написать обработчик события MenuItem.DrawItem. Ему передается аргумент типа DrawItemEventArgs с полем Graphics у которого есть метод DrawIcon.
И я об этих штуках подумал с самого начала:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
  Private Sub menu_FileNew_DrawItem(ByVal sender As Object,
   ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles menu_FileNew.DrawItem
    Dim item_disabled As Boolean = Not CType(sender, MenuItem).Enabled
    e.Graphics.DrawIcon(IIf(item_disabled, My.Resources.CONTACT_NEWBW,
     My.Resources.CONTACT_NEW), e.Bounds.Left - 16,
     e.Bounds.Top + (e.Bounds.Bottom - e.Bounds.Top - 16) / 2)
  End Sub


Bazile, спасибо, почти убедил.
Но возникает непраздный вопрос, который я вынес в отдельный топик:
Как сделать событие Handle на "все элементы одного типа"

И мне нужен ответ на него, иначе дальше двигаться ой как нелегко.
Ведь API-шный вариант:
WM_DRAWITEM + ODT_MENU
универсален ДЛЯ ВСЕХ пунктов меню,
а добавить (например) 40 хэндлов для .NET обработчика (каждого пункта меню) -задолбаешься.
Поможете?
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38397233
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile2.1 К WinAPI структурам имеет смысл добавдять атрибут StructLayout чтобы .NET гарантировано не менял порядок полей в памяти.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<StructLayout(LayoutKind.Sequential)>
Friend Structure DRAWITEMSTRUCT
	Public CtlType As Integer
	Public CtlID As Integer
	Public itemID As Integer
	Public itemAction As Integer
	Public itemState As Integer
	Public hwndItem As IntPtr
	Public hdc As IntPtr
	Public rcItem As RECT
	Public itemData As IntPtr
End Structure


2.2 Я заменил модификатор Private на Friend т.к. скорее всего он здесь больше подходит. Это означает что DRAWITEMSTRUCT будет доступна всем типам в этой сборке, но не за ее пределами. На твоем месте я бы создал модуль где собрал бы все объявления функций и структур данных WinAPI чтобы не смешивать их с основным кодом.

2.3 Модификатор на уровне структуры указывает права доступа других типов из этой и других сборок. Модификатор на уровне класса/структуры устанавливает права доступа для всех внешних потребителей. Private поле доступно только внутри самого типа.

<StructLayout(LayoutKind.Sequential)> -пожалуй приму по принципу "надо так надо".
По поводу Friend Structure -скорее буду это писать там где был Public Type .
Не совсем понимаю разницу между Friend и Public , но парочка тестов показывает что Friend это скорее Public и точно не Private.
По поводу объявлять структуры/ф-ции и т.д. в одном модуле как Public/Friend не люблю.
Последнее время стараюсь объявлять как Private в модуле где это нужно.
С кодом не мешаю, все объявления сверху, код ниже.
Часто бывает, содрал где-то один модуль с Public, потом другой с Public того-же самого, да еще и записано не совсем так (а в VB с API особенно это сплошь и рядом), потом лезут ошибки, разруливать которые не всегда легко. И начинаешь нервно менять Public на Private и не понимать почему в том проекте работало а в этом тот же код не хочет работать.
И Dim для членов структуры как-то красивше выглядит.

Посему и с учетом сказанного вами возьму пока за правило:
Код: vbnet
1.
2.
3.
4.
<StructLayout(LayoutKind.Sequential)>
Private Structure DRAWITEMSTRUCT
	Dim CtlType As Integer
	Dim CtlID As Integer



Ну а уж где Private недостаточно (нужен доступ из другого модуля), пусть будет Friend
Код: vbnet
1.
2.
3.
4.
<StructLayout(LayoutKind.Sequential)>
Friend Structure DRAWITEMSTRUCT
	Dim CtlType As Integer
	Dim CtlID As Integer


А там поживем-увидим.

=======

bazile3. .NET автоматически использует Unicode версию WinAPI функции поэтому указывать суффикс нет нужды. Тем более что многие *A функции вызывают *W версию что только добавляет лишние накладные расходы.
Насчет "указывать суффикс нет нужды" наверно погорячились, по крайней мере с тем VB-синтаксисом что я использую.
Без указания Alias "*W" либо Alias "*A", прога ругается.
Я думаю не будет ошибкой (с учетом сказанного) везде указывать *W (где есть A и W варианты).
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38397633
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Не совсем понимаю разницу между Friend и Public, но парочка тестов показывает что Friend это скорее Public и точно не Private.
Public тип доступен из другой сборки, Friend тип нет. Что такое сборки можно прочитать в книге Рихтера CLR via C#. Примеры в ней приводятся на C#, но относятся к .NET в целом поэтому советую ее прочитать в любом случае.

Дмитрий77По поводу объявлять структуры/ф-ции и т.д. в одном модуле как Public/Friend не люблю.
Последнее время стараюсь объявлять как Private в модуле где это нужно.
Делай как тебе удобнее, но подумай над тем что функции и структуры WinAPI не принадлежат твоему коду поэтому "прятать" их особого смысла нет. Вынеся их в отдельный модуль ты дашь себе возможность повторного использования этих деклараций в любом месте кода.

Дмитрий77И Dim для членов структуры как-то красивше выглядит.
Для сведения - Dim VarName As TypeName эквивалентно Private Dim VarName As TypeName или просто Private VarName As TypeName.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38397867
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileв книге Рихтера CLR via C#.
OK, скачал.
Буду почитывать параллельно.

Пока тупо изучил Зибиров Visual Basic 2010 на примерах, детсад конечно, но по крайне мере перестал путаться в новой студии (как создавать, сохранять проекты, добавлять ссылки и т.п.) и чего-то общее уловил. Единственное, про Web/ASP читать не стал.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38427910
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileДмитрий77По поводу объявлять структуры/ф-ции и т.д. в одном модуле как Public/Friend не люблю.
Последнее время стараюсь объявлять как Private в модуле где это нужно.
Делай как тебе удобнее, но подумай над тем что функции и структуры WinAPI не принадлежат твоему коду поэтому "прятать" их особого смысла нет. Вынеся их в отдельный модуль ты дашь себе возможность повторного использования этих деклараций в любом месте кода.

А вообще ты прав.

У меня раньше (давно) был следующий принцип(вернее его отсутствие):
Писать преимущественно public как в скачанном первоисточнике, а потом - достанется оттуда - хорошо, не достану -нарисую заново.

За последние годы выработался такой подход:
Писать преимущественно Private - т.е. те константы-ф-ции что нужны в данном модуле.
Желательно без избытка (т.е. не переписываю туда главу мсдн, а пишу 2-3 нужные константы)
Т.е. одна и та же ф-ция может быть объявлена 5 раз в разных модулях, но они друг другу не мешают за счет Private,
как например
SendMessage (...byRef as Any) SendMessage(...ByVal as Long) -обычно в VB6 обзывается как SendMessageLong

Но это согласен не очень удобно. Забываешь, ищешь опять эти константы поиском в MSDN, Google, в собственных проектах, из своих же старых топиков на этом форуме и т.д.

Не очень удобно, джентльменский набор то в общем то "для меня стандартный".

Т.е. идея правильная. Думаю допишу свой "первый тестовый" .Net проект (как есть с multi-Privat привычкой) и попробую перетасовать под конец.

Предполагаю что будет какое-то к-во модулей с константами, декларациями API, м.б. какими-то базовыми ф-циями (не относящимися жестко к проекту). ListView, Treeview, Toolbar, Rebar, окна, и т.д.

Но дальше я начинаю писать другой проект. Что я делаю. Нужна какая-то ф-ция - создаю модуль, копирую модуль из первого проекта в него.
Потом дописываю туда еще чего-то - новые константы и т.д.

Дык вот.
Как сделать так чтобы все "стандартные базовые модули" лежали б в одном месте, не копировались в проект, но при этом были б доступны из любого проекта? (речь идет о МОИХ текстовых модулях).

Может мне кто-то это объяснить по простому как так сделать?
(ну типа как в C++ я указываю пути к какому нибудь Windows 2003 SDK (dll,exe, src и т.д.) и он оттуда видит .h файлы).
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38428072
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Может мне кто-то это объяснить по простому как так сделать?
Solution в студии сделай
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38428195
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, создай проект Class Library с необходимыми декларациями и подключай его как reference к нужным проектам.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436274
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileДмитрий77, создай проект Class Library с необходимыми декларациями и подключай его как reference к нужным проектам.
Я попробовал, но что-то мне не очень понравилось, скорее не понравилось.
1) должен указывать "ссылки" при изготовлении самой Class Library. Но это ладно.
2) У меня в основном "модули" а не "классы", а ф-ции этих модулей при подключении Class Library через "ссылку" не видны, видны только классы.

Я тут другой способ придумал.
Кладешь все общие модули-классы в одну папку.
А в проект подключаешь
Проект -> Существующий элемент -> Добавить как связь.

Он в папку не копируется, и работаешь с оригинальным модулем "последней версии", параллельно можно добавлять чего-то сразу в "оригинал", а компилируется все точно также.
Чем не вариант?

Единственное, если например захотел скомпилировать старую версию, а там что-то переделано (а не дописано).
Ну, можно как вариант их копировать в проект на финальной стадии (не такая уж частая операция и не так уж у меня много проектов).
Ну, это уже заморочки кот. каждый для себя сам как то решает.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436281
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77У меня в основном "модули" а не "классы"

нет никаких "модулей" , это просто статические классы
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436296
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилнет никаких "модулей" , это просто статические классы
да читал я про это
модули в Class Library добавил, ссылку на Class Library добавил, ф-цию этого "статического класса" как вызвать не знаю.

Слушай, мне чего простых ссылок на модули не хватит, когда я в них могу лазить привычным образом и сразу что-то добавлять.
Потом проект со "ссылками" выглядит точно так же как с "оригиналами".
Эту class library еще за собой таскать небось надо.

Зачем мудрить? Exe-шник типа на 50kb легче будет?

Мне по хорошему не в лом все эти модули в проект засовывать. Но интересна возможность их параллельной модернизации по мере написания проектов (единство "версии" так сказать). А то в одном модуле одно, в другом другое, при этом одно и то же в нескольких разных модулях, вот это честно уже надоело. bazile тут прав, и я об этом тоже уже давно думал. Счас по полочкам разложил, пусть и дальше порядок будет.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436301
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не для уменьшения размера а для нормальной организации проектов
Самому ж не нравится копипаст модулей
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436305
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

конечно не нравится.
Но ссылки то на модуль думаю достаточно.
Кстати счас проверил, в VB6 если добавить "существующий", то он не копируется в папку с проектом.
И че я этим не пользовался...
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436340
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Я попробовал, но что-то мне не очень понравилось, скорее не понравилось.
1) должен указывать "ссылки" при изготовлении самой Class Library. Но это ладно.
2) У меня в основном "модули" а не "классы", а ф-ции этих модулей при подключении Class Library через "ссылку" не видны, видны только классы.
1) Если ты о ссылках на другие сборки, то это делается один раз и на недостаток никак не тянет
2) Они не видны т.к. не хватает директивы Imports.
2.1) Добавь директиву Imports с именем "Root Namespace" из свойств проекта. По умолчанию оно совпадает с именем проекта.
ИЛИ
2.2) Открой свойства проекта где будешь использовать библиотеку и на закладке References выбери свой Imported Namespace

Кстати плохо что юзаешь модули. Классы можно объвлять как Partial разбивая их на части. Для внешних функий самое-то. То что надо будет перед именем функции еще писать имя класса это мелочь. Попробуй сделать Public Shared Class Win32 и в нем объявлять фукнции и структуры для WinAPI.

Дмитрий77Мне по хорошему не в лом все эти модули в проект засовывать.
По-моему проще добавить ссылку на одну библиотеку, чем добавлять несколько модулей.

Дмитрий77Эту class library еще за собой таскать небось надо.
Можно "таскать", а можно положить в GAC и она автоматически будет доступна всем приложениям которые её используют. Причем без перекомпиляции этих приложений.

Дмитрий77И че я этим не пользовался...
Остановись пока не поздно. В .NET лучше выность общую функциональность в отдельную сборку. В будущем будет проще поддерживать проект.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436348
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile1) Если ты о ссылках на другие сборки, то это делается один раз и на недостаток никак не тянет
2) Они не видны т.к. не хватает директивы Imports.
2.1) Добавь директиву Imports с именем "Root Namespace" из свойств проекта. По умолчанию оно совпадает с именем проекта.
ИЛИ
2.2) Открой свойства проекта где будешь использовать библиотеку и на закладке References выбери свой Imported Namespace
Да делал я все это. Но ф-ции которые в модулях то не видны.
4 класса вижу, в крайнем случае на стрелочку с ошибкой нажимаю и Imports добавляю.
А 15 модулей с API и своими общими ф-циями - не вижу.
Я уж понял, что на классы надо переделывать.
bazileКстати плохо что юзаешь модули. Классы можно объвлять как Partial разбивая их на части. Для внешних функий самое-то.Не знаю. Так привык и трудностей не испытываю. Это вопрос привычки. В VB6 тоже любителей классов хватает. (P.S Еще любителей всяких ocx-ов b active-x-ов которые я искренне ненавижу)
bazile То что надо будет перед именем функции еще писать имя класса это мелочь..Ну не скажи. Рутины хватит.
bazileПопробуй сделать Public Shared Class Win32 и в нем объявлять фукнции и структуры для WinAPI...
В один модуль все лепить не хочу, надо как то разделять по смыслу. Это я счас один проект доделал, у меня уже 15 "общих" модулей.
Переделывать это все на "классы" - честно, не хотелось бы.
bazileДмитрий77Мне по хорошему не в лом все эти модули в проект засовывать.
По-моему проще добавить ссылку на одну библиотеку, чем добавлять несколько модулей....
Проще то проще. Но перекомпилировать эту библиотеку каждый раз когда надо добавить туда константу точно не проще.
Я ж как понимаешь не весь MSDN туда импортирую, а по мере необходимости.
А делая как я придумал можно править текущую "сборку" (папку с модулями) на ходу, причем из любого проекта.
!Но лучше думаю по окончании работы над версией проекта перенести тек. модули в него - для обратной совместимости - вдруг "тек. версия модулей" изменится на столько, что старый проект не скомпилируется (или ошибки не увижу).

Да не, нормально все. Счас первый клон доделал, НЕ ХУЖЕ чем был в VB6 получился. Месяц убил, но по крайней мере все в чистовике сделал и в .Net малость освоился.
API используется значительно меньше чем в VB6. Работа с файлами, с реестром, с системой -API вообще не нужны.
Стили, манифесты, 32-битные иконки -в общем неплохо, почти все решаемо. GDI+ имеется встроенное,это пригодится.
С сабклассингом через NativeWindow надо глядеть в оба, но Help без него бы не доделал, классический сабклассинг надежнее тогда когда его надо снять/поставить на ходу, но вот с Help вылетает также как и в VB6, даже не стал разбираться.
Контролы - отдельная песня, но в целом они более обучены.
Label's конечно вчера огорчили конкретно с этим мазюканьем.
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436394
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Проще то проще. Но перекомпилировать эту библиотеку каждый раз когда надо добавить туда константу точно не проще.
ты не поверишь, VS делает это самостоятельно (если ты конечно проекты в solution соберёшь)
...
Рейтинг: 0 / 0
Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
    #38436821
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Да делал я все это. Но ф-ции которые в модулях то не видны.
Видимо ты забыл указать модификатор доступа Public потому что у меня все прекрасно видится.

Дмитрий77Проще то проще. Но перекомпилировать эту библиотеку каждый раз когда надо добавить туда константу точно не проще.
Это решается путем включения проекта с библиотекой в solution.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Типы (int32,int16,integer,intPtr) -в VB6 обычно long, структуры Public/Privat, A/W-Unicode
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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