вопрос по полиморфии

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
neoner
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.01.2004 (Вт) 21:27

вопрос по полиморфии

Сообщение neoner » 07.01.2004 (Ср) 19:55

Есть ли такой контрол, передав которому файлы с исходным текстом на VB, он компилирует их в экзешник?
Или как вместо контрола использовать сам VB?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 07.01.2004 (Ср) 20:58

сам VB c ключиком

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

sebas<-@->mail.ru

neoner
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.01.2004 (Вт) 21:27

Сообщение neoner » 07.01.2004 (Ср) 22:39

Sebas писал(а):сам VB c ключиком

посмотрив редакторе зарегистрированных расширений для .VBP

У меня при выполнении команды MAKE
вылетает ошибка
"Unexpected error occurred in code generator or linker"

стоит:
VB6-enterprise edition
На:
win-XP


И еще вопрос!
Как можно будет указать путь и имя откомпиленного экзешника?

BOO
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 06.09.2003 (Сб) 14:23
Откуда: Саратовская обл. г.Энгельс

Сообщение BOO » 08.01.2004 (Чт) 2:43

А ты проверил код программы :?:
VB вроде не хочет компилить проекты в которых он видит явные оБшЫбги :lol:
Слушайте рок!

neoner
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.01.2004 (Вт) 21:27

Сообщение neoner » 08.01.2004 (Чт) 17:48

BOO писал(а):А ты проверил код программы :?:
VB вроде не хочет компилить проекты в которых он видит явные оБшЫбги :lol:


Так нормально кампЫлЫт а из контекстного меню нехАтИт

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 08.01.2004 (Чт) 18:02

А причём здесь полиморфия? :)

neoner
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.01.2004 (Вт) 21:27

Сообщение neoner » 08.01.2004 (Чт) 20:10

Lobo писал(а):А причём здесь полиморфия? :)

Я ведь написал в начале, что хотелось-бы иметь такой уже готовый самостоятельный контрол, который компилит без самого васика.

т.е. прога будет делать свою модификацию...

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 08.01.2004 (Чт) 20:22

neoner писал(а):т.е. прога будет делать свою модификацию...

Полиморфизм немного из другой области и здесь совершенно не при чём.

neoner
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.01.2004 (Вт) 21:27

Сообщение neoner » 08.01.2004 (Чт) 21:15

skiperski писал(а):Полиморфизм немного из другой области и здесь совершенно не при чём.


Ведь из разговора понятно что я имею ввиду?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 08.01.2004 (Чт) 21:32

neoner писал(а):Ведь из разговора понятно что я имею ввиду?

Из разговора - понятно. Но речь-то не о том.

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

А своим последним ответом ты всё же признаёшь, что да, действительно, полиморфизм тут не при чём.

neoner
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.01.2004 (Вт) 21:27

Сообщение neoner » 08.01.2004 (Чт) 23:14

skiperski писал(а):
neoner писал(а):Ведь из разговора понятно что я имею ввиду?

Из разговора - понятно. Но речь-то не о том.

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

А своим последним ответом ты всё же признаёшь, что да, действительно, полиморфизм тут не при чём.


Я заметил только одно, что все форумы это собрание самодовольных людей. Каждый ходит по разделам, и пытается сумничать вместо того чтобы помочь по конкретному вопросу.

Некоторые отвечают на вопросы так:
-Да, я и не слышал про такое...
-А причём здесь...
и на этом их ответ заканчивается, не сказав толком почему они так написали.
Такие люди довольны своей работой, пусть даже они и не ответили на вопрос.(ведь им не до этого они просто набирают количество постов, дабы сказать всем вот он тот Я кого нужно слушать).
А на самом-то деле он ничего толком не объяснит, и будет не лучше меня, по вашим словам "чайника".

Нет уже смысла продолжать сюда писать. По тому, что разговор идет уже не о том, а идет выяснение кто кого круче сможет обо*Рать.

А человек-то уйдет, так и не найдя ответа на свой вопрос...
Проще общаться с Рамблером... он хоть и выдает 1000 ответов на поставленный вопрос, но перебрав их можно найти хоть что-то полезное.

Да я чайник... Ну что-ж тогда пошел за мылом и веревкой, так и не дожив до получения паспорта.


А на счет контрола вопрос остается открытым. я думаю кому-ниить это понадобится кроме меня, такому-же чайнику и соискателю.

Да пусть ВАМ станет легче от следующей строчки:
skiperski писал(а): да, действительно, полиморфизм тут не при чём.
УЖЕ не при чем! Моя вина что я задал самый первый вопрос в посте неправильно.
Аминь...

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 09.01.2004 (Пт) 2:07

Тебе же Sebas уже насовеовал. Или что не так? Посмотреть ключи компиляции не можешь?

И никто не хотел тебя обижать, просто пытались уточнить вопрос, может ты хотел одного, а спросил другое.

neoner
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.01.2004 (Вт) 21:27

Сообщение neoner » 09.01.2004 (Пт) 11:44

skiperski писал(а):Тебе же Sebas уже насовеовал. Или что не так? Посмотреть ключи компиляции не можешь?

А я ему написал ответ если что...

А на самом-то деле в чем я неправ на счет полиморфии?

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 09.01.2004 (Пт) 12:01

Я тоже никого не хотел обидеть. Думал, сам не разобрался...

Полиморфизм - понятие из объектно-ориентированного программирования и означает, что одно и то же свойство или метод могут предоставить несколько классов. Перед вызовом свойства или метода тот, кто их вызывает, не обязан знать, к какому классу принадлежит объект.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.01.2004 (Пт) 13:03

neoner писал(а):Я ведь написал в начале, что хотелось-бы иметь такой уже готовый самостоятельный контрол, который компилит без самого васика.
т.е. прога будет делать свою модификацию...


Не хотелось бы тебя огорчать, но этого ты сделать не сможешь. В какой-то степени тебе поможет Microsoft Scripting Runtime, но с большими ограничениями.
Lasciate ogni speranza, voi ch'entrate.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 09.01.2004 (Пт) 13:54

Вот тут вот Lobo дал пример командной строки и где искать ключи, у меня сейчас хелпа нет, так что придётся тебе самому напрячся.
http://bbs.vbstreets.ru/viewtopic.php?p=28700#28700

По поводу ошибки. Ты пробовал откомпилировать проект по-нормальному в среде разработки? Если там компилится, то и в виде команды должно прокатить.

Делал когда-то проект, который тащит из SourceSafe проекты и перекомпилирует их. Публикую кусок, но т.к. он выдран из контекста, то могут быть непонятки.

Код: Выделить всё
Private Function MakeExe()
   
    Dim Path As String
    Dim LogName As String
    Dim iFF As Long
    Dim s As String
   
    LogName = LocalSpec & ".log"
   
    If (RunAndWait(VBPath & " /m " & LocalSpec & " /out " & LogName, Path, vbNormalFocus)) Then
       
        On Error Resume Next
        iFF = FreeFile()
        Open LogName For Input As #iFF
        s = input(LOF(iFF), #iFF)
        Close #iFF
        On Error GoTo hErr
       
        If (Len(s) = 0) Then GoTo WithError
        If (InStr(1, s, " failed.", vbTextCompare)) Then ErrMsg = s: GoTo WithError
       
        Debug.Print "Ok!"
       
    Else
WithError:
        Debug.Print "Error!"
        GoTo ExitRoutine
    End If

End Function


, где
VBPath - полный путь к VB6.exe, например = "C:\PROGRAMME\MICROSOFT VISUAL STUDIO\VB98\vb6.exe"

LocalSpec - полный путь к проекту, например = "C:\DEVELOP\tools\ProjectMaker\exe\VBMakeLib.vbp"

Path - дирректорий в котором будут создаваться временные файлы, например родительский дирректорий проекта. (Path = fso.GetParentFolderName(LocalSpec))

Собственно, тебе нужна лишь строка компиляции, поэтому параметр Path не важен.

Чего тут происходит. Получаем путь к проекту и пытаемся его откомпилировать. Т.к. компиляция отрабатывается асинхронно, то нужно ловить момент её окончания. Для того и служит функция RunAndWait(), которая возвращает True при удачном завершении компиляции и False в противном случае. Но даже получив True мы можем быть уверены только в том, что процесс завершился без ошибок самого процесса компиляции, а не в том что в проекте нет ошибок и он был нормально откомпилирован. Для проверки последнего вычитываем log-файл, если он пуст, то компиляция не была завершена (неизвестно почему), если не пуст, но начинается с " failed.", то компиляция была прервана из-за ошибки в проекте, далее следует описание ошибки.

Код: Выделить всё
Const INFINITE = &HFFFF
'StartupInfo constants
Public Const STARTF_FORCEOFFFEEDBACK = &H80
Public Const STARTF_FORCEONFEEDBACK = &H40
Public Const STARTF_RUNFULLSCREEN = &H20
Public Const STARTF_USECOUNTCHARS = &H8
Public Const STARTF_USEFILLATTRIBUTE = &H10
Public Const STARTF_USEPOSITION = &H4
Public Const STARTF_USESHOWWINDOW = &H1
Public Const STARTF_USESIZE = &H2
Public Const STARTF_USESTDHANDLES = &H100
'ShowWindow constants
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
Public Const SW_SHOWDEFAULT = 10

Public Type PROCESS_INFORMATION
    hProcess                        As Long
    hThread                         As Long
    dwProcessId                     As Long
    dwThreadId                      As Long
End Type

Public Type STARTUPINFO
    cb                              As Long
    lpReserved                      As String
    lpDesktop                       As String
    lpTitle                         As String
    dwX                             As Long
    dwY                             As Long
    dwXSize                         As Long
    dwYSize                         As Long
    dwXCountChars                   As Long
    dwYCountChars                   As Long
    dwFillAttribute                 As Long
    dwFlags                         As Long
    wShowWindow                     As Integer
    cbReserved2                     As Integer
    lpReserved2                     As Long
    hStdInput                       As Long
    hStdOutput                      As Long
    hStdError                       As Long
End Type

Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Public Function RunAndWait(ByVal ComLine As String, ByVal DefaultDir As String, ShowFlag As VbAppWinStyle) As Boolean

    Dim si As STARTUPINFO
    Dim pi As PROCESS_INFORMATION
    Dim bReturn As Boolean
   
    si.wShowWindow = ShowFlag
    si.dwFlags = STARTF_USESHOWWINDOW
   
    bReturn = True
    If (CreateProcess(vbNullString, ComLine, ByVal 0&, ByVal 0&, False, 0, ByVal 0&, DefaultDir, si, pi)) Then
        Do
            If (GetWindowThreadProcessId(FindWindow(vbNullString, "Microsoft Visual Basic"), 0) = pi.dwThreadId) Then
                Debug.Print "aaaaaaaaa"
                Call CloseWindow
                bReturn = False
                Exit Do
            End If
            If (WaitForSingleObject(pi.hProcess, 1) = 0) Then Exit Do
            DoEvents
        Loop
        'WaitForSingleObject pi.hProcess, INFINITE
        CloseHandle pi.hProcess
        RunAndWait = bReturn
        Exit Function
    End If
    RunAndWait = False
End Function


Функция RunAndWait() создаёт процесс и затем в цикле ждёт его окончания. Если же во время компиляции появляется окно с сообщением об ошибке и требованием нажмать батон, то это окно ловится, закрывается и возврашается значение о неудачной компиляции.

neoner
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.01.2004 (Вт) 21:27

Сообщение neoner » 10.01.2004 (Сб) 0:52

Самый важный момент понятен.
спасибо skiperski за кусок кода.
(прога была написана без ошибок и компилилиась нормально в самом vb но не хотела из командной строки)
vb почемуто пытается обратиться к папке windows\рабочий стол\ которой в ХР нет. когда создал все пошло нормально.
И после долгих мучений с урезаным vb, наконец получен первый экзешник.
Но все-же непонятно как указать путь и имя exe?
MSDN нету, поиски инфы в инете оставляют желать лучшего, если у кого есть, и не влом потратить немного времени скиньте ПЛЗ инфу по параметрам запуска vb6.exe (command line, arguments)

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.01.2004 (Вс) 14:12

Имя EXE-файла записано в самом проекте. Можно попробовать править его. Но, скорее всего, в параметрах компиляции можно его задавать. Хелп всё ещё отсутствует.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Yandex-бот и гости: 10

    TopList  
cron