Обсуждение программирования на Visual Basic в конференции ru.visual.basic
resorce file |
Привет, Andrey! * 05 Hоя 03 14:34, Andrey Prokhorov писал(а) All AP> Hе против буду послушать об AP> альтернативных вариантах обеспечения локализации приложений. Альтернатива? В WinAMP`е 3 это как-то сделанно при помощи xml-файла. Hо реализация этого для меня остаётся за кадром. Vlad * Origin: Bce,сказаное хорошо,-мое,кем б оно ни было сказано (2:5061/120.41) |
Re: resorce file |
From: "Sergey Broudkov" Hello, Vlad! You wrote to Andrey Prokhorov on Thu, 06 Nov 2003 22:39:28 +0300: AP>> Hе против буду послушать об AP>> альтернативных вариантах обеспечения локализации приложений. VK> Альтернатива? В WinAMP`е 3 это как-то сделанно при помощи xml-файла. Hо VK> реализация этого для меня остаётся за кадром. А что тут за кадром? Рассматривай XML как структурированное хранилище. Можно обычными запросами (типа SQL) сделать выборку по заданному критерию (языку) и получить значения строк, которые нужно прописать в элементы форм, подлежащих локализации. -- Regards, Sergey Broudkov sbpro [@] geocities.com ICQ #4841919 А может, в реестре чего подправить? d;--D * Origin: Demos online service (2:5020/400) |
Re: CreateProcess |
Мы где-то виделись, Andrew? Fri, 7 Nov 2003 22:32:18 +0200 в RU.VISUAL.BASIC Andrew Usachov -> All: AU> Пытался написать вариант с CreateProcess() из API, подсунув в структуру AU> STARTUP_INFO хелдл открытого мной файла. Hо в него ничего не записывается AU> :-( У кого-нибудь есть работающий пример? ========================================================================== * Area: RU.VISUAL.BASIC * From: Dmitriy Kozyrev, 2:5023/11.148 (Thu, 23 Oct 2003 20:41:10 +0300) * To: Sergey Ozyakov * Subj: Re: console ========================================================================== Мы где-то виделись, Sergey? 23 Oct 03 15:21:27 в RU.VISUAL.BASIC Sergey Ozyakov -> мне: DK>> Ты пытаешься считать из трубы больше данных, чем в ней есть. DK>> Определить, есть ли в трубе данные и сколько их, можно через DK>> PeekNamedPipe. SO> Hаписал я такой код: SO> bool = PeekNamedPipe(hReadPipe, Buffer, BUFSIZE, BytesRead, totalbytes, SO> unread) Так он мне дает buffer=empty, bytesread,totalbytes,unread=0 SO> Где что не так? Вот, нашел нужный тебе код в архивах своих старых программ. Hе идеал, конечно, но вполне работоспособно. ============================== Смотри ниже =============================== Function RunCGIApp(CGIApp As String, InData As String, OutData As String, ErrData As String) As Boolean Dim pi As PROCESS_INFORMATION, si As STARTUPINFO Dim sa As SECURITY_ATTRIBUTES Dim Ret As Long, BytesRW&, BytesToWrite&, BytesTotal&, CmdLine$ Dim hInRead&, hInWrite&, hOutRead&, hOutWrite&, hErrRead&, hErrWrite& sa.nLength = Len(sa) sa.bInheritHandle = 1 sa.lpSecurityDescriptor = 0 If AppData.CGIMode = cmPipes And Len(InData) <> 0 Then Ret = CreatePipe(hInRead, hInWrite, sa, 4096) If Ret = 0 Then GoTo IntErr End If Ret = CreatePipe(hOutRead, hOutWrite, sa, AppData.PipeBufferSize) If Ret = 0 Then GoTo IntErr Ret = CreatePipe(hErrRead, hErrWrite, sa, AppData.PipeBufferSize) If Ret = 0 Then GoTo IntErr With si .cb = Len(si) .dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW .hStdInput = hInRead .hStdOutput = hOutWrite .hStdError = hErrWrite .wShowWindow = 0 End With If AppData.CGIMode = cmPipes Then BytesToWrite = Len(InData) If BytesToWrite > AppData.PipeBufferSize Then BytesToWrite = AppData.PipeBufferSize Ret = WriteFile(hInWrite, ByVal InData, BytesToWrite, BytesRW, 0) If Ret = 0 Then GoTo IntErr End If CmdLine = vbNullString If AppData.CGIMode = cmCmdLineAndPipes And Len(InData) <> 0 Then CmdLine = " " & InData End If Ret = CreateProcess(CGIApp, CmdLine, sa, sa, 1, NORMAL_PRIORITY_CLASS, ByVal 0&, vbNullString, si, pi) If Ret <> 1 Then GoTo IntErr End If Ret = WaitForSingleObject(pi.hProcess, AppData.CGITimeOut * 1000) If Ret = WAIT_TIMEOUT Then TerminateProcess pi.hProcess, 0 End If Ret = PeekNamedPipe(hErrRead, 0, 0, 0, BytesTotal, 0) If BytesTotal <> 0 Then ErrData = String$(AppData.PipeBufferSize, 0) Ret = ReadFile(hErrRead, ByVal ErrData, Len(ErrData), BytesRW, 0) If Ret <> 1 Then GoTo IntErr End If ErrData = Left$(ErrData, BytesRW) End If If Len(ErrData) = 0 Then Ret = PeekNamedPipe(hOutRead, 0, 0, 0, BytesTotal, 0) If BytesTotal <> 0 Then OutData = String$(AppData.PipeBufferSize, 0) Ret = ReadFile(hOutRead, ByVal OutData, Len(OutData), BytesRW, 0) If Ret <> 1 Then GoTo IntErr End If OutData = Left$(OutData, BytesRW) End If End If RunCGIApp = True ESub: CloseHandle pi.hProcess CloseHandle pi.hThread CloseHandle hInRead CloseHandle hInWrite CloseHandle hOutRead CloseHandle hOutWrite CloseHandle hErrRead CloseHandle hErrWrite Exit Function IntErr: Dim lErr& ErrData = "Internal error" ' & GetLastError & " (" & GetAPIError(GetLastError) & ")" GoTo ESub End Function ============================== Смотри выше =============================== Всего хорошего! Дмитрий Козырев aka Master -+- Microsoft Outlook Express 6.0 + Fidolook SL .86 + Origin: Дорогу осилит идущий. (2:5023/11.148) ========================================================================== Всего хорошего! Дмитрий Козырев aka Master * Origin: Дорогу осилит идущий. (2:5023/11.148) |
двоичное представление числа и сдвиг |
Приветствую в нашем подземелье, Nick ? продолжая изыскания получилось следующее насчет моего варианта ты был прав два раза :) я немного модифицировал предложенный тобой вариант и получил наверно самы й быстрый вариант ниже прога с тремя вариантами 1й мой 2й от Dmitry Miloserdov 3й от Nick Gorinov + небольшая переделка итоги на моей машине 1й вариант - 10.09 сек последнее место 2й вариант - 7.57 сек второе место 3й вариант - 4.60 сек первое место итого IF + ELSE гораздо быстрее логики AND и цикла DO кому хочется на форму Command1 Command2 Command3 Label1 Label2 Label3 и код : '===================================================================== Dim DD(1000000) As Byte Dim I1 As Long Dim I2 As Long Dim SS As String Private Sub Command1_Click() t1 = Timer For I1 = 1 To 1000000 SS = "" For I2 = 0 To 7 If DD(I1) And (2 ^ I2) Then SS = SS & "1" Else SS = SS & "0" End If Next I2 Next I1 t2 = Timer Label1.Caption = Format(t2 - t1, "##0.000") End Sub Private Sub Command2_Click() t1 = Timer For I2 = 1 To 1000000 SS = "" I1 = 256 Do I1 = I1 \ 2 If (DD(I2) And I1) Then SS = SS & "1" Else SS = SS & "0" End If Loop While I1 >= 1 Next I2 t2 = Timer Label2.Caption = Format(t2 - t1, "##0.000") End Sub Private Sub Command3_Click() Dim DDD As Byte t1 = Timer For I2 = 1 To 1000000 SS = "" DDD = DD(I2) If DDD >= 128 Then SS = SS & "1": DDD = DDD - 128 Else SS = SS & "0" If DDD >= 64 Then SS = SS & "1": DDD = DDD - 64 Else SS = SS & "0" If DDD >= 32 Then SS = SS & "1": DDD = DDD - 32 Else SS = SS & "0" If DDD >= 16 Then SS = SS & "1": DDD = DDD - 16 Else SS = SS & "0" If DDD >= 8 Then SS = SS & "1": DDD = DDD - 8 Else SS = SS & "0" If DDD >= 4 Then SS = SS & "1": DDD = DDD - 4 Else SS = SS & "0" If DDD >= 2 Then SS = SS & "1": DDD = DDD - 2 Else SS = SS & "0" If DDD = 1 Then SS = SS & "1" Else SS = SS & "0" Next I2 t2 = Timer Label3.Caption = Format(t2 - t1, "##0.000") End Sub Private Sub Form_Load() For I1 = 1 To 1000000 DD(II) = Rnd * 255 Next I1 End Sub Я взял бы частями, но мне нужно сразу. Genrih Rudenok. * Origin: Genrih Cool! (2:452/25.115) |
двоичное представление числа и сдвиг |
Приветствую в нашем подземелье, Nick ? >2. VB - не совсем тот язык, при написании программ на котором стоит >думать о времени выполнения. в любом языке стоит думать о времени выполнения - даже в VB >3. размерность задачи такова, что не имеет значения, сколько она будет >решаться: 10 или 20 милисекунд. - мне надо было 20 раз в секунду просчитывать со сдвигами десятичные в бинарный вид количество этих десятичных 1200 каждый из этих 20 раз (псевдо графический дисплей) вывод текста и графики в реальном времени - писать надо на VB желание заказчика итого на машинке типа 3го целерона 1000 все это прекрасно успевается с запасом 20% по времени (после оптимизации приведенной в предыдущем письме) тоже самое написаное на С делает тоже самое на 3м целероне 700 с таким же запасом разница почти никакая - время затраченное на VB версию и на C версию различно и очень примерно 2-3 часа на всю обработку на VB и 1.5 суток на тоже самое на С притом пишу и на том и на том давно и быстро Я взял бы частями, но мне нужно сразу. Genrih Rudenok. * Origin: Genrih Cool! (2:452/25.115) |
Ошибка программы |
Рад приветствовать тебя, Slava! 07 ноября 2003 в 00:07, Slava Voronin -- Victor Tikhomirov: VT>> Применительно к Access, что необходимо для _появления_ сообщения VT>> о недопустимости операции с дальнейшим выходом из программы? SV> Из справки А97 "Объект Err": SV> .... SV> Для того чтобы создать ошибку выполнения в программе, следует SV> использовать метод Raise. SV> .... SV> Т.е. генеришь свою ошибку, выводишь соответсвенно оформленный мессадж SV> и закрываешь ацесс(или чего там у тебя) Метод Raise не предназначен для вызова ошибки Microsoft Access или ошибки объекта доступа к данным (DAO). Т.е. данный способ не подходит для закрытия приложения Victor * Origin: Картина Репина: Запорожцы пишут письмо Мерседесу (2:5030/1247.16) |
Re: двоичное представление числа и сдвиг |
Мы где-то виделись, Genrih? 08 Nov 03 20:58:00 в RU.VISUAL.BASIC Genrih Rudenok -> Nick Gorinov: GR> итоги на моей машине GR> 1й вариант - 10.09 сек последнее место GR> 2й вариант - 7.57 сек второе место GR> 3й вариант - 4.60 сек первое место GR> итого IF + ELSE гораздо быстрее логики AND и цикла DO Предлагаю свой вариант (на 40% быстрее третьего): ============================== Смотри ниже =============================== Dim Pow2() As Long Private Sub Command4_Click() t1 = Timer Dim lngValue As Long Dim strDest As String Dim i&, j& For i = 1& To 1000000& lngValue = DD(i) strDest = " " For j = 0& To 7& If lngValue And Pow2(j) Then Mid$(strDest, 8& - j, 1&) = "1" Else Mid$(strDest, 8& - j, 1&) = "0" End If Next j Next i t2 = Timer Label4.Caption = Format(t2 - t1, "##0.000") End Sub Private Sub Form_Load() Dim i& ReDim Pow2(7) For i = 0 To 7 Pow2(i) = 2 ^ i Next i End Sub ============================== Смотри выше =============================== GR> Private Sub Form_Load() GR> For I1 = 1 To 1000000 GR> DD(II) = Rnd * 255 Опечатка: не II, а I1. GR> Next I1 GR> End Sub Всего хорошего! Дмитрий Козырев aka Master P.S. Hа самом деле это не мой вариант, а сборка из идей всей эхи. ;) Все-таки эта тема уже не первый раз здесь обсуждается. * Origin: Дорогу осилит идущий. (2:5023/11.148) |
NT |
Здравствуй, All! Вопросы такие. 1. Как в HТ (XP/2K) прописать в систему драйвер (SYS файл)? Помещение в system32\drivers недостаточно. Может ли Inno Setup сам прописывать драйвера? 2. Манифест файл. Программа собрана на VB6. Манифест файл, пробовал редактировать и оставлять как есть. Манифест кладетс в каталог к программе, exe запускается, далее звук критической ошибки и все. Hикаких сообщений, программа не стартует. Стоит убрать илипереименовать манифетс - все нормально. Что может быть, как работать с манифест-файлом? 3. Как в 9X обратится к данным на хдд, не включенным в разделы? Вот таким способом: CreateFile("\\.\VWIN32", ..............) можно получить доступ только к логическому диску. Удачи! * Origin: "Made in Heaven" Queen (2:5020/794.77) |
присваивание значения выражению |
Привет, Dmitriy! 09 Nov 03 10:42, Dmitriy Kozyrev wrote to Genrih Rudenok: DK> Mid$(strDest, 8& - j, 1&) = "1" бррр! не понял... присваивание значения выражению? как оно работает? пока у меня только одна мысль о том, что Mid$ возвращает ссылку на строку. _впервые_ встречаю подобную конструкцию, не видел такого ни в одном языке. подобные вещи обычно делаются совсем по другому. например: strcpy(&strDest[8-j],"1"); С уважением, Nick! np: кулеры, винты, уличный шум, etc. * Origin: Ловись коннект большой и маленький! (2:5038/15.1) |
двоичное представление числа и сдвиг |
Привет, Genrih! 08 Nov 03 21:08, Genrih Rudenok wrote to Nick Gorinov: >> 2. VB - не совсем тот язык, при написании программ на котором стоит >> думать о времени выполнения. GR> в любом языке стоит думать о времени выполнения - даже в VB после некоторого порога оптимизации ИМХО стоит уходить на другой язык или же реализовывать на другом языке только критичные по времени части программы. >> 3. размерность задачи такова, что не имеет значения, сколько она >> будет решаться: 10 или 20 милисекунд. GR> - мне надо было 20 раз в секунду просчитывать со сдвигами десятичные в GR> бинарный вид количество этих десятичных 1200 каждый из этих 20 раз GR> (псевдо графический дисплей) вывод текста и графики в реальном времени GR> - писать надо на VB желание заказчика А откуда берутся числа, которые надо переводить? не является ли их получение узким местом? GR> итого на машинке типа 3го целерона 1000 все это прекрасно успевается GR> с запасом 20% по времени (после оптимизации приведенной в предыдущем GR> письме) GR> тоже самое написаное на С делает тоже самое на 3м целероне 700 с GR> таким же запасом закинь, плз, код на C. в эху может и не стоит... в мыло кидай. кстати, какой именно компилятор С использовался? GR> разница почти никакая - время затраченное на VB версию и на C версию GR> различно и очень примерно 2-3 часа на всю обработку на VB и 1.5 суток GR> на тоже самое на С притом пишу и на том и на том давно и быстро HЕ ВЕРЮ! если исходить из того, что абстрактному программисту известны оба языка в необходимом объеме, известен алгоритм и то, что этот абстрактный программист не допускает ошибок, то времена реализации не будут настолько отличаться, ибо в этом случае время написания будет определяться только объемом кода. При приближении модели к реальности еще можно учесть допущение алгоритмических ошибок примерно в одинаковом объеме в каждом из исходников. затраты на их поиск также отличаться почти не будут. Синтаксических ошибок по крайней мере я почти не допускаю(пишу в основном на С++). С уважением, Nick! np: кулеры, винты, уличный шум, etc. * Origin: Ловись коннект большой и маленький! (2:5038/15.1) |