Private Const MAX_PATH = 260 Private Const SHGFI_DISPLAYNAME = &H200 ' get display name Private Const SHGFI_EXETYPE = &H2000 ' return exe type Private Const SHGFI_LARGEICON = &H0 ' get large icon Private Const SHGFI_SHELLICONSIZE = &H4 ' get shell size icon Private Const SHGFI_SMALLICON = &H1 ' get small icon Private Const SHGFI_SYSICONINDEX = &H4000 ' get system icondex Private Const SHGFI_TYPENAME = &H400 ' get type name Private Const ILD_BLEND50 = &H4 Private Const ILD_BLEND25 = &H2 Private Const ILD_TRANSPARENT = &H1 Private Const CLR_NONE = &HFFFFFFFF Private Const CLR_DEFAULT = &HFF000000 Private Type SHFILEINFO hIcon As Long ' : icon iIcon As Long ' : icondex dwAttributes As Long ' : SFGAO_ flags szDisplayName As String * MAX_PATH ' : display name (or path) szTypeName As String * 80 ' : type name End Type Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long Private Declare Function ImageList_Draw Lib "comctl32.dll" (ByVal himl As Long, ByVal i As Long, ByVal hdcDst As Long, ByVal x As Long, ByVal y As Long, ByVal fStyle As Long) As Long Private Declare Function ImageList_DrawEx Lib "comctl32.dll" (ByVal himl As Long, ByVal i As Long, ByVal hdcDst As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal rgbBk As Long, ByVal rgbFg As Long, ByVal fStyle As Long) As Long Private Sub Form_Load() Dim hImage As Long, udtFI As SHFILEINFO
Me.AutoRedraw = True
hImage = SHGetFileInfo("c:\AUTOEXEC.BAT", ByVal 0&, udtFI, Len(udtFI), SHGFI_SYSICONINDEX Or SHGFI_LARGEICON) ImageList_Draw hImage, udtFI.iIcon, Me.hDC, 0, 0, ILD_TRANSPARENT ImageList_DrawEx hImage, udtFI.iIcon, Me.hDC, 32, 0, 32, 32, CLR_NONE, CLR_DEFAULT, ILD_BLEND50 End Sub
Оплата принимает значение: нал, безнал. Необходимо составить SQL-запрос, чтобы выбрать: Покупатель, Город, Сумма оплаты по налу, Сумма оплаты по безналу, при условии, что Сумма оплаты по налу больше, чем по безналу.
SELECT Покупатель, Город, nal, beznal (SELECT Сумма FROM Покупки WHERE ПокупательID = Покупатели.ПокупательID and Оплата = 'нал') as nal (SELECT Сумма FROM Покупки WHERE ПокупательID = Покупатели.ПокупательID and Оплата = 'безнал') as beznal FROM Покупатели WHERE nal>beznal
Есть форма, в ней 3 текстовых поля text1(I). Одно или несколько полей могут быть пустыми. Нужно сделать выборку из базы по непустым полям. Как решить проблему?
Также есть приватный метод, который вызывает его. Есть класс В, потомок А, в нем метод GO() перекрыт. Проблема: при создании объекта класса В вызывается, соотвественно, приватный метод из А, но он вызывает не перекрытый метод GO(), а свой, из класса А. Что делать?
Базовый класс:
class A
public overridable sub GO() msgbox 1 end sub
public sub Do() ... call PrivSub() ... end sub
private sub PrivSub() ... GO() ... end sub
end class 'A
Унаследованный: class B
public overriden sub GO() msgbox 2 end sub
end class 'B
Использование:
dim d as new B() d.Do() В результате выведется сообщение "1", а не "2".
!!!
Вот работающий код:
Imports System
Public Class MyApplication Public Shared Sub Main() dim d as new B() d.Doo() Console.ReadLine() End Sub End Class
Class A public overridable sub GOO() Console.WriteLine("A") end sub
public sub Doo() call PrivSub() end sub
private sub PrivSub() GOO() end sub End Class
class B Inherits A public overrides sub GOO() Console.WriteLine("B") end sub end class
Для простых задач, если не надо вплотную работать со стримами или куками, например, может пригодиться класс System.Net.WebClient.
Dim client As New WebClient() Dim pageData As [Byte]() = client.DownloadData("http://www.contoso.com") Dim pageHtml As String = Encoding.ASCII.GetString(pageData)
Exe должен обращаться к определенному файлу, смотреть там ключик, сопоставлять со своим, и если они равно, дать работать.
Как зашифровать ключик в этом файле, чтобы пользователь сам не мог изменить его? Ключом может быть и дата, до которой должна работать программа.
!!!
Лучше хранить не сам ключ, а hash. Использовать System.Security.Cryptography. Про криптографию в MSDN можно почитать вот здесь: ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/cpguide/html/cpconcryptographyoverview.htm
Мне интересно посмотреть, что посылает и получает сервер при взаимодействии с клиентами. Везде говорится, что отсылаются SOAP-сообщения, и даже приводятся фрагменты этих сообщений. А есть ли такая готовая программа, которая позволяет отслеживать и просматривать эти сообщения в реальном времени? Это касается Remoting и Веб-сервисов.
Как вписать комментарий в пользовательский метод? Родные классы\методы включают в себя комментарии, которые при наведении мыши показываются в строке подсказки. Можно ли вставить мои комментарии в метод\класс\тип?
!!!
Для С# и C++ модель такая: В коде перед объявлением методов, классов или, там переменных, вставляются комментарии вида:
/// /// This method bails user off the system or ensures /// that he(she) not going to get there anymore. /// ///Delinquent user ID public void BailOff(int userID) {...}
С момента создания этого комментария VS уже с готовностью демонстрирует подсказки в подсказках IntelliSense в любом месте решения (Solution). Если же надо, чтобы подсказки были видны и далее, когда сборка уже собрана и используется в готовом виде из других сборок, то все эти комментарии экспортируются в xml с помощью специальной опции компилятора /doc (напомню, речь идет о С#). В результате создается xml со структурой вида:
organismbase
This class defines common properties for all commands/actions that can be assigned to a creature. These actions include movement, reproduction,
eating, attacking, etc...
The ID of the creature requesting the action. This will always be the GUID/ID for your creature.
System.String of the GUID/ID for the organism requesting the action.
...
И теперь достаточно положить этот xml рядом со сборкой, чтобы IntelliSense начал показывать подсказки по всем описанным элементам.
Теоретически поведение сборки не зависит от того, на каком языке были исходники, так что можно предположить, что если рядом со сборокой, написанной на vb, положить правильный xml, то IntelliSense будет все равно, из какого языка она произошла. Проблема только в том, что xml придется писать ручками, либо с помощью add-in'ов сторонних фирм. Но в VB 2005 уже имеется встроенная поддержка XML-комментариев.
Есть проблема с генерацией событий для клиентов удаленного объекта в VB .NET.
При вызове метода на сервере, инициируется событие, например так:
public sub Submit() raiseevent MySubmitEvent( me, new eventargs() ) end sub
А клиенты, которые имеют ссылку на удаленный объект, получают это событие. Проблема в том, что если один из клиентов отключается аварийно (без соответствующего вызова RemoveHandler), то остальные клиенты при последующей генерации этого события получают исключение.
Я видел пример на C#, как избежать такой ситуации. Там на сервере событие инициировалось для каждого клиента отдельно в блоке try...catch:
public void Submit(){ if( mysubmitEventHandler != null ){ delegate[] invList = mysubmitEventHandler.GetInvocationList() for each delegate d in invList{ try d.Invoke( this, new eventargs ) catch } } }
Можно ли как-нибудь проделать такое же и в VB.NET?
!!!
Надо объявлять переменную без ключевого слова Еvent. Только клиенты теперь подписываются на событие сервера, при помощи метода Delegate.Combine( ... ), а не AddHandler. По крайней мере, это работает.
Сервер:
public class CMyRemote inherits MarshalByRefObject
public delegate sub mysubmitEventHandler( sender as Object, e as EventArgs ) public MySubmitEvent as mysubmitEventHandler
public sub Submit() if not( MySubmitEvent is nothing ) then dim aInvList() as [delegate] = MySubmitEvent.GetInvocationList() dim d as [delegate] for each d in aInvList try ' вызывается для каждого клиента, подписавшегося на событие ' если один из клиентов аварийно завершит свою работу, то будет инициировано исключение... d.DynamicInvoke( new Object(){ me, new eventargs() } ) catch e as Exception MySubmitEvent = system.Delegate.Remove( MySubmitEvent, d ) end try next end if end sub End Class
Клиент:
public class MyClient inherits MarshalByRefObject
public shared sub Main() ConfigureRemoteServer()
dim ro as New MyRemoteAssm.CMyRemote dim d as MyRemoteAssm.CMyRemote.mysubmitEventHandler = AddressOf me.MyCallbackFunc
ro.MySubmitEvent = system.Delegate.Combine( ro.MySubmitEvent, d ) console.WriteLine( "подключение к удаленному объекту прошло успешно!...") ro.Submit() console.ReadLine() ro.MySubmitEvent = system.Delegate.Remove( ro.MySubmitEvent, d ) End Sub
public sub ConfigureRemoteServer() RemotingConfiguration.Configure( "..\ClientConsole.exe.config" ) End Sub
public sub MyCallbackFunc( o as Object, e as EventArgs ) console.WriteLine( "событие получено..." ) End Sub
Необходимо создать маленькую утилитку, которая блокировала или разблокировала бы учетную запись в домене. Создаем вхождение:
DirectoryEntry entry = new DirectoryEntry("WinNT://domain/user");
и получаем через entry.Properties набор свойств. Насколько я понимаю, за состояние учетной записи отвечает свойство userFlags. Но как понять какой бит за что отвечает? Как нужно поменять этот флаг для того, чтобы например заблокировать запись?
!!!
Судя по значению маски UF_ACCOUNTDISABLE - это 1-ый бит (если считать с 0-го), когда он установлен - account в disabled состоянии. Вот функция для изменения этого флага:
Необходимо создать маленькую утилитку, которая блокировала или разблокировала бы учетную запись в домене. Создаем вхождение:
DirectoryEntry entry = new DirectoryEntry("WinNT://domain/user");
и получаем через entry.Properties набор свойств. Насколько я понимаю, за состояние учетной записи отвечает свойство userFlags. Но как понять какой бит за что отвечает? Как нужно поменять этот флаг для того, чтобы например заблокировать запись?
!!!
Судя по значению маски UF_ACCOUNTDISABLE - это 1-ый бит (если считать с 0-го), когда он установлен - account в disabled состоянии. Вот функция для изменения этого флага:
Мне необходимо зашифровать, а потом расшифровать текстовый файл. Как это сделать?
!!!
Посмотрите пространство имен System.Security.Cryptography. На сайте vbnet.ru в библиотеке кодов есть примерчик по симметричному шифрованию, а в разделе Статьи - статья по той же теме.
После нескольких часов привыкания к интерфейсу VB.NET (+MSDN), VB6 сиротой кажется.
Думаю, без хорошей книги - никак! Но книг много! Посоветуйте толковую. Дайте название, имя автора и ISDN, а я сам найду. Хотя, если будут ориентиры - еще лучше!
!!!
Говорят, что книга Дэна Эпплмэна - лучшая:
Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.) Эта книга была задумана как одна из первых книг о.NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...
Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.
Заказать можно здесь: http://vbnet.ru/vbshop/buybook.asp?id=236