Что же делать с текстом?

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Что же делать с текстом?

Сообщение DrKillJoy » 29.05.2012 (Вт) 21:16

Изучая DirectX + Visual Basic 2008, я столкнулся с одной, очень неприятной проблемой... Перенося код с "С#" компилятор стал ругаться на строку отрисовки текста "DrawText".
Строка самая обычная, и прекрасно работает в "C#", а вот работать в VB, она не захотела! Воспользовавшись справкой я получил, вот такую инфу:

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

Наиболее вероятной причиной этой ошибки является чувствительность к регистру. Имена Visual Basic не чувствительны к регистру, то есть пользователь может произвольно менять их регистр в различных местах кода. Например, при определении переменной с именем XYZ и последующем обращении к ней как xyz компилятор расценит два имени равнозначными.

Однако другие языки, например Visual C# и Visual C++ чувствительны к регистру. В таком языке XYZ и xyz не считаются одним и тем же именем. Таким образом класс, написанный на таком языке, может определить переменную с именем XYZ и свойство с именем xyz. Среда CLR сохраняет чувствительность к регистру в сборках. При этом, если приложение Visual Basic обращается к сборке с именами XYZ и xyz, они отображаются как одно и то же имя.

Идентификатор ошибки: BC31429

Исправление этой ошибки
Если имеется доступ к исходному коду определяющего типа, рассмотрите возможность переименования элементов, чтобы они отличались не только регистром. Это может оказаться невозможным, если определяющий тип уже был опубликован и используется другими приложениями.

Если переименовать элементы в определяющем типе невозможно, удалите рассматриваемый элемент программирования из кода. Доступ к элементу, имеющему несколько определений, в Visual Basic невозможен.



Люди!!! Очень прошу, скажите, что это просто какая-то злая шутка... Просто, текст это очень важный эл-нт, и я не знаю, как без него...

Буду рад любой информацией по теме, ну и вашими мыслями...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что же делать с текстом?

Сообщение Хакер » 29.05.2012 (Вт) 21:21

Что за метод, какого класса?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 29.05.2012 (Вт) 21:39

Класс: "Microsoft.DirectX.Direct3D.Font"
А метод... Простите за глупый вопрос, но что такое метод?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что же делать с текстом?

Сообщение Хакер » 29.05.2012 (Вт) 21:48

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.05.2012 (Вт) 21:57

Вероятно, рефлексия может быть решением, но скорее всего не лучшим.
Выложи код на VB.NET, если можешь.

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 29.05.2012 (Вт) 22:16

Вот код, как просили... Надеюсь, он поможет.
Код: Выделить всё
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Public Class Main
#Region " Объявление переменных Direct3D "
    Private Direct3D_Device As Direct3D.Device
    Private Direct3D_PresentParameters As New Direct3D.PresentParameters
    Private myFont As Direct3D.Font = Nothing
#End Region

    Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.ClientSize = New System.Drawing.Size(300, 300)
        Me.Text = "Direct3D Tutorial 1 - Создание устройства"
        'Устройство Direct3D
        Direct3D_PresentParameters.Windowed = True 'Задает окнонный/полноэкранный режим
        Direct3D_PresentParameters.SwapEffect = SwapEffect.Discard 'Режим работы буферной подкачки (сейчас содержимое сбрасывется если не готово)
        Direct3D_Device = New Direct3D.Device(0, Direct3D.DeviceType.Hardware, Me.Handle, CreateFlags.SoftwareVertexProcessing, Direct3D_PresentParameters)
        myFont = New Font(Direct3D_Device, New System.Drawing.Font("Arial", 14, FontStyle.Regular))
    End Sub


    Private Sub Main_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Direct3D_Device.Clear(ClearFlags.Target, System.Drawing.Color.CornflowerBlue, 1, 0) 'Очистка устройства и заливка выбранным цветом
        myFont.drawtext(Nothing, "Число полигонов в моделе: ", New Rectangle(10, 10, 0, 0), DrawTextFormat.NoClip, Color.White)
        Direct3D_Device.Present() 'Отобразить изменения
    End Sub
End Class


А что такое рефлексия?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.05.2012 (Вт) 22:39

А можно проект?

PS: Что надо подключить, чтобы он вообще понял, что такое Microsoft.DirectX?

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 29.05.2012 (Вт) 22:48

Я подключал:
1) Microsoft.DirectX
2) Microsoft.DirectX.Direct3D
3) Microsoft.DirectX.Direct3DX
Вроде все...

Сейчас еще попробую проект прицепить...
У вас нет доступа для просмотра вложений в этом сообщении.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.05.2012 (Вт) 22:54

У меня нет таких библиотек. Выложи и их.

Нет библиотек.png
У вас нет доступа для просмотра вложений в этом сообщении.

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 29.05.2012 (Вт) 22:56

Плохо... Что же делать, с этим текстом? Неужели его и впрямь нельзя использовать в VB?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.05.2012 (Вт) 23:02

Давай библиотеки. Я не верю, что Microsoft могло сделать так. Скорее всего, ошибка у тебя. А если ошибка действительно та, что описана, то рефлексия должна помочь, хотя мне и не нравится такой вариант.

PS: Для нестандартных библиотек лучше ставить CopyLocal = true.

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 29.05.2012 (Вт) 23:11

Вот библиотеки...
Брал их вот отсюда: "C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0"

P.S. "CopyLocal = true" - Возьму на заметку!
У вас нет доступа для просмотра вложений в этом сообщении.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.05.2012 (Вт) 23:42

Бррррррррррр.

WindowsApplication1.7z

У меня при запуске падает так:
Managed Debugging Assistant 'LoaderLock' has detected a problem in 'E:\Интернет\2012\2012_05\2012_05_29\WindowsApplication1\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.vshost.exe'.
Additional Information: DLL 'E:\Интернет\2012\2012_05\2012_05_29\WindowsApplication1\WindowsApplication1\WindowsApplication1\bin\Debug\Microsoft.DirectX.Direct3DX.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.
У вас нет доступа для просмотра вложений в этом сообщении.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Что же делать с текстом?

Сообщение Mikle » 30.05.2012 (Ср) 9:02

Qwertiy писал(а):У меня нет таких библиотек. Выложи и их.

Возьми дистрибутив DirectX9.0c, с нём файл ManagedDX.cab, в нём - дистрибутив ManagedDX, установи его. А вручную подсовывать такие DLL неправильно.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.05.2012 (Ср) 9:24

Mikle писал(а):А вручную подсовывать такие DLL неправильно.

Я в принципе догадываюсь, что неправильно. Но для того, чтобы просто проверить, что оно будет компилироваться вполне достаточно.
Да, ты можешь глянуть мой вариант? Есть подозрение, что использование здесь рефлексии будет сильно портить производительность.

PS: Забавно - скачиваний проекта 1, скачиваний библиотек 2, а скачиваний моего проекта 0. Кому библиотеки-то просто так понадобились? :mrgreen:

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Что же делать с текстом?

Сообщение FireFenix » 30.05.2012 (Ср) 9:51

Проблема в самом фреймворке, т.к. C-like defenition.
По моему тут только 2 варианта: либо вызывать через рефлексию, что не рационально, либо использовать Point (или два Int32) вместо Rectangle

По хорошему вообще лучше отказаться от MDX и использовать вместо него XNA, как результат его эволюции, или обёртки над нативным DX, такие как SlimDX, SharpDX
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось FireFenix 30.05.2012 (Ср) 10:01, всего редактировалось 2 раз(а).
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Что же делать с текстом?

Сообщение Mikle » 30.05.2012 (Ср) 9:57

Qwertiy писал(а):Кому библиотеки-то просто так понадобились?

Мне, я хотел убедиться, что автор выложил MDX в виде набора DLL, а не инсталлятор, как положено.
Вечером дома, если время будет, гляну твой проект. Тут у меня даже фреймворка нет, не то, что студии.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что же делать с текстом?

Сообщение Хакер » 30.05.2012 (Ср) 13:07

FireFenix писал(а):По хорошему вообще лучше отказаться от MDX и использовать вместо него XNA, как результат его эволюции, или обёртки над нативным DX, такие как SlimDX, SharpDX

Или отказаться от дотнета :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 30.05.2012 (Ср) 13:30

Qwertiy - твой пример запускается, но текст не отрисовывается. Так и не понял, что делает рефлексия...

По моему тут только 2 варианта: либо вызывать через рефлексию, что не рационально, либо использовать Point (или два Int32) вместо Rectangle
А можно пример, как это будет работать с двумя Point? Я пробовал заменить Rectangle на Point, но это ничего не дало!
По хорошему вообще лучше отказаться от MDX и использовать вместо него XNA, как результат его эволюции, или обёртки над нативным DX, такие как SlimDX, SharpDX
А я думал, что XNA, это технология для xbox, но видимо я заблуждался... А есть ли какие-нибудь книги, сайты по применению VB + XNA?

Или отказаться от дотнета
о_О Что же тогда использовать вместо него?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.05.2012 (Ср) 14:20

DrKillJoy писал(а):Qwertiy - твой пример запускается, но текст не отрисовывается.

Но и с NullReferenceException не падает. Это я проверял. Странно.

FireFenix писал(а):Проблема в самом фреймворке, т.к. C-like defenition.

А как такое в других языках работает? Передача по ссылке и по значению... Странное это что-то. Или там чего-то не хватает, типа const?

FireFenix писал(а):либо использовать Point (или два Int32) вместо Rectangle

Тебе не кажется, что в Rectangle их в два раза больше?
И вообще, среда совсем не показывает, что метод с таким именем есть. Не факт, что оно будет работать даже с ними.

DrKillJoy писал(а):о_О Что же тогда использовать вместо него?

Хакер - любитель VB6 :) И всякие штуки с ним вытворяет :)

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 30.05.2012 (Ср) 14:28

Но и с NullReferenceException не падает. Это я проверял. Странно.
Да, очень странно... Блин, что же делать с этим текстом? Хоть на другой язык переходи!

Хакер - любитель VB6 И всякие штуки с ним вытворяет
Не знал... Я раньше тоже под ним сидел, но как на Win7 перешел, среда разработки глючить стала. Пришлось перейти на VB2008.

Есть еще у кого, какие предложения по поводу "текста"?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Что же делать с текстом?

Сообщение Mikle » 30.05.2012 (Ср) 15:00

Хакер писал(а):отказаться от дотнета

А где взять такой же мощный и высокоуровневый, как vb.net и C#, и с такой же удобной средой разработки язык? Ява, разве что? И то, это замена одного фреймворка на другой, да и не совсем полноценная замена самого языка.
Пойми, мне самому не слишком нравится net-фреймворк, как, впрочем, и ActiveX. Но сам язык vb.net очень хорош, или ты в нём тоже видишь кучу недостатков? Да, vb6 позволяет не пользоваться COM-ActiveX, а vb.net уже никак от фреймворка не отвяжешь, а кроме этого?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.05.2012 (Ср) 15:11

DrKillJoy писал(а):Пришлось перейти на VB2008.

Что ж не 2010-то?

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 30.05.2012 (Ср) 15:42

Что ж не 2010-то?
Ну, что было под рукой, на то и перешел! А что, большая разница?

Что же делать с текстом?

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Что же делать с текстом?

Сообщение FireFenix » 30.05.2012 (Ср) 17:29

Хакер писал(а):
FireFenix писал(а):По хорошему вообще лучше отказаться от MDX и использовать вместо него XNA, как результат его эволюции, или обёртки над нативным DX, такие как SlimDX, SharpDX

Или отказаться от дотнета :)

Когда мой велосипед будет нормально работать, или ваше произведение искусства дойдёт до релизной версии - без проблем, откажемся от фишек .NET'a :)

А по делу - если учесть, что MDX - это дополнение обёртка к DX, и с ней никто работать не принуждает, то можно и в обход - использовать нативный DX
И вообще, считается не кошерно юзать пространство имён Direct3DX :D

DrKillJoy писал(а):Так и не понял, что делает рефлексия...

В данном случае библиотека MDX содержит 2 определения метода - с передачей по ссылке и по значению. Но мы знаем, что в VB нету так таковой ссылки на объект, поэтому компилятор пишет, что не знает какому вариант передать управление, при вызове функции.
Дkя этого нам нужна рефлексия, с помощью доступа кода к своей структуре, мы можем насильно вызвать метод, выбранный по некоторым параметрам вручную, и передать требуемые значения

Qwertiy писал(а):
FireFenix писал(а):Проблема в самом фреймворке, т.к. C-like defenition.

А как такое в других языках работает? Передача по ссылке и по значению... Странное это что-то. Или там чего-то не хватает, типа const?

В других языках? в C# есть ссылка, вот и передаётся нормально :) Других кроме C# и VB.NET не юзал => не знаю :)

DrKillJoy писал(а):
Что ж не 2010-то?
Ну, что было под рукой, на то и перешел! А что, большая разница?

В юзер-френдли только

DrKillJoy писал(а):Что же делать с текстом?

Берёшь нормальный фреймворк типа SlimDX и используешь его, если конечно тебе не вариант и позволяют знания написать свой интерфейс вывода текста.
Если всё же хочешь брендовый Microsoft-style, то используешь XNA
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что же делать с текстом?

Сообщение Хакер » 30.05.2012 (Ср) 17:50

Mikle писал(а):А где взять такой же мощный и высокоуровневый, как vb.net и C#, и с такой же удобной средой разработки язык?

Я буду до усрачки посинения спорить, что самая лучшая среда — у VB6. У всего остального среда понтовее, но не лучше. Нет другой такой среды, которая позволяет остановить код в любом месте, написать кучу нового кода, поменять половину старого, оставшуюся половину удалить, и затем продолжить выполнение.

Mikle писал(а):А где взять такой же мощный и высокоуровневый

А чем конкретно изменяется мощность и высокоуровневость?
Богатейшим набором встроенных функций (как у PHP, например, такого больше нигде нет, вроде)?
Богатейшим набором встроенных классов (как у Джавы и возможно дотнета)?
Богатейшим набором модулей (как у Перла)?
Богатейшим синтаксических конструкций, включая синтаксический сахар?


Я совершенно искренне спрашиваю.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Что же делать с текстом?

Сообщение Mikle » 30.05.2012 (Ср) 18:04

Среду VB6 я сам считаю лучшей.
Встроенные ф-ции, модули и классы меня мало волнуют.
Мне в vb.net нравятся конструкторы с параметрами, вложенные и приватные классы, наследование, нэймспейсы, методы у структур, отсутствие устаревших, выбивающихся из общего стиля, команд, типа Line, Pset, Print, переопределение операторов.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что же делать с текстом?

Сообщение Хакер » 30.05.2012 (Ср) 18:09

Mikle, а ты знаком внутренним языком Unreal Engine (я видел и писал только на языке от UE-1)? Он тебе нравится?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Что же делать с текстом?

Сообщение DrKillJoy » 30.05.2012 (Ср) 18:18

И вообще, считается не кошерно юзать пространство имён Direct3DX
Я этого не знал...
Разобрался, что такое рефлексия. Но, думаю, что это не вариант!
В юзер-френдли только
Ну, значит буду и дальше использовать VB2008, так как он меня устраивает.
Берёшь нормальный фреймворк типа SlimDX и используешь его, если конечно тебе не вариант и позволяют знания написать свой интерфейс вывода текста.
Если всё же хочешь брендовый Microsoft-style, то используешь XNA
Да, а вот фреймворк придется сменить. Еще не выбрал на какой... Надо больше про них почитать!
Я буду до усрачки посинения спорить, что самая лучшая среда — у VB6. У всего остального среда понтовее, но не лучше. Нет другой такой среды, которая позволяет остановить код в любом месте, написать кучу нового кода, поменять половину старого, оставшуюся половину удалить, и затем продолжить выполнение.
Приятно видеть такую привязанность, когда многие при виде бейсика корчат рожи...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.05.2012 (Ср) 18:28

FireFenix писал(а):
DrKillJoy писал(а):
Что ж не 2010-то?
Ну, что было под рукой, на то и перешел! А что, большая разница?

В юзер-френдли только

Неа. В .NET 4 больше возможностей. А в .NET 3.5 есть вполне конкретные баги.

След.

Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList  
cron