Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.140.103] |
|
Прикр. сообщ.
#1
,
|
|
|
В DLL можно использовать только модули (нет классов и форм, почему-то при их вызове прога вызвавшая функцию рушится).
Возможности: Экспорт функций по ординалу^ Создание консольных приложений Минимальный размер программы 5 кб Автодобавление функций DllMain и Main (опционально) Создание *.map файла (опционально) Переключение языков (русский/английский) 12.08.2004 Добавилась возможность создания консольных приложений (пример есть в архиве) автор примера Lamerroot 13.08.2004 В опциях добавилась возможность уменьшать размер любого компилируемого объекта. Пустая экзешка теперь весит 5 кб! 18.08.2004 Приношу свои извинения. Но в последней версии Alex221(особоая благодарность за помощь) обнаружил серьезный баг не позволявший компилировать DLL-файлы. Ссылка на скачивание обновлена. Принимается помощь по переводам на различные языки. Языки хранятся в виде строк с раздилителями в ресурсах файла vb_dll.dll. Качать (Последнее обновление 2 декабря 2006г.): (предыдущее обновление 18 Августа 2004г.): Прикреплённый файлvb_dll.rar (27.73 Кбайт, скачиваний: 3813) |
Сообщ.
#1
,
|
|
|
Цитата Vasya2000,7.08.04, 12:03 А теоретические основы этого феномена нельзя ли прямо щас??? Все гениальное просто: 0. перехватываем командную строку линкера 1. чуток ее изменяем 2. вызываем настоящий линкер |
Сообщ.
#2
,
|
|
|
Интересно что на это скажут ненавистники VB.
Мы здесь на форуме доказали 3 вещи: 1. Работа с графикой не медленная (VB-BALL) 2. Можно пользоваться указателями ( Как сменить картинку на десктопе ) 3. самое главное: Можно создавать полноценные DLL (не ActiveX) Добавлено в : P.S. Даже самый дурацкий замысел можно воплотить мастерски Добавлено в : Могу сказать больше: наши DLL лучше сишных! Они даже работать с объектами позволяют: Sub SetCaption(ByRef F As Form) F.Caption = "Hi from DLL" End Sub Данную функцию можно сделать внешней и она будет корректно работать! а декларировать ее надо так: Private Declare Sub SetCaption Lib "DLL" (F As Form) |
Сообщ.
#3
,
|
|
|
Нечего делать пока расскажу как я до всего этого дошел:
Однажды при компиляции у меня вылетела ошибка связанная с link.exe по опыту я знаю, что файлы типа link.exe обычно компилируют проги и все такое. Увидев, что это досовский файл я запустил его в досе коммандой link.exe > c:\link.txt в надежде увидеть там какую нибудь инфу, а может даже ключики какие нибудь. Он показал кучу всяких ключиков. Цитата Microsoft ® Incremental Linker Version 6.00.8168 Copyright © Microsoft Corp 1992-1998. All rights reserved. usage: LINK [options] [files] [@commandfile] options: /ALIGN:# /BASE:{address|@filename,key} /COMMENT:comment /DEBUG /DEBUGTYPE:{CV|COFF} /DEF:filename /DEFAULTLIB:library /DELAY:{NOBIND|UNLOAD} /DELAYLOAD:dll /DLL /DRIVER[:{UPONLY|WDM}] /ENTRY:symbol /EXETYPE:DYNAMIC /EXPORT:symbol /FIXED[:NO] /FORCE[:{MULTIPLE|UNRESOLVED}] /GPSIZE:# /HEAP:reserve[,commit] /IMPLIB:filename /INCLUDE:symbol /INCREMENTAL:{YES|NO} /LARGEADDRESSAWARE[:NO] /LIBPATH:dir /LINK50COMPAT /MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4} /MAP[:filename] /MAPINFO:{EXPORTS|FIXUPS|LINES} /MERGE:from=to /NODEFAULTLIB[:library] /NOENTRY /NOLOGO /OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98} /ORDER:@filename /OUT:filename /PDB:{filename|NONE} /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]} /PROFILE /RELEASE /SECTION:name,[E][R][W][S][D][K][L][P][X] /STACK:reserve[,commit] /STUB:filename /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]] /SWAPRUN:{CD|NET} /VERBOSE[:LIB] /VERSION:#[.#] /VXD /WARN[:warninglevel] /WINDOWSCE:{CONVERT|EMULATION} /WS:AGGRESSIVE Названия некоторых(/VXD /DLL /DRIVER /DEF) ключиков меня заинтриговали. Стало понятно, что линкер способен компилировать библиотеки и драйвера. Зашел на microsoft.com ввел link.exe в надежде хоть на что-то, по поиску набрел на ссылочку http://msdn.microsoft.com/library/default....erreference.asp. Там были описания этих же ключей, но поконкретней, чем мне вывалил сам link.exe. Не найдя больше ничего интересного пошел в яндекс набрал экспорт функций нашел чето-то по дельфям. Что мол для экспорта ф-ий нужен файл *.def в папке с прогой определенного содержания с именами ф-ий и т.п. Приводилось примерное его содержание. Я недолго думая накатал такой файл с именами экспортируемых функций. Запустил компиляцию и ... облом. Все по старому. Долго мучаясь я догадался заменить link.exe своим файлом и посмотреть какие ему шлются комманды. Изучив пойманную комманду я понял, что в коммандной строке нет ключиков /DLL и /DEF. Дальше я поступил так: Отловив командную строку я вставил в нее эти ключики вручную и попробовал вызвать настоящий линкер с измененной коммандной строкой. На этот раз вообще ничего не получилось... От знакомства с PowerBasic'ом я помню, что есть такая ф-я DLLMain и она должна быть в каждой DLL. Скопировав ее в мой компилируемый проект я опять попытался скомпилировать. Тогда я подумал, что возможно есть еще какой-то ключик. Долго мучаясь я увидел, что в коммандную строку попадает такая подстрока /ENTRY:__vbaS я недолго думая заменил ее на /ENTRY:DLLMain Проект скомпилировался нормально. И вдруг открывая DLL-ку с помощью Depends Viewer'a я с ужасом+криком+смехом(короче я неповерил своим глазам) но там заместо привычных глазу DllCanUnloadNow, DllGetClassObject, DllRegisterServer и DllUnregisterServer были прописаны мои функции RCP и SCINSoft. Я тут же дрожащими пальцами создал новый проект, задекларировал свои функции, запустил прогу и тут БАБАХ, и все заработало... В общем я до сих пор в шоке. Вот такая вот история с хорошим концом. Я здесь описал наверно только 1/10 часть всего, что я пережил создавая данный линкер. Я еще не написал, о том, что захотелось большего, а именно, чтобы через компилировать через IDe безгемора, ручной прописки функций. Пошарив по яндексу я был приятно удивлен, что VBIDE похож на офис, в нем можно делать такие-же макросы, ADD-In'ы и все такое. Искал пример. Нашел изучил. Написал свой. Все! Кстати там подно еще непонятых мною ключей. Так что впереди еще много открытий. Мы и драйвер когда нибудь на VB напишем. А пока я лишь разобрал ключики MAP и MAPINFO, они создают карту функций и всего такого в файле Project1.map |
Сообщ.
#4
,
|
|
|
Цитата Uhri,9.08.04, 16:22 Sciner, ты конечно молодец, я тебе даже плюсик добавляю, но тем не менее, по сравнению с длл в С++ это далеко до совершенства. Формы там ворос третий, не идут можно и Апи как говорит Вася, но вопрос самый главный, как это все отлаживать пошагово... Цитата Отлаживать пошагово Поясни поконкретней |
Сообщ.
#5
,
|
|
|
Да, довольно интересное открытие. Правда, это скорее баг компилятора, чем пробуманная реализация. Дело в том, что данный процесс нарушает некоторые аспекты компоновки, поэтому библиотека будет работать не стабильно. В общем, меня эта находка заинтересовала, так что я провел некоторое более глубокое исследования процесса компиляции. На самом деле ликер может дать больше гораздо больше возможностей, чем просто ДЛЛ. Вот, к каким результатом я пришел:
1. Приятно было узнать, что компилятор ВБ аналогичен компилятору ВЦ, причем он оба этих компилятора построены на едином стандарте и поддерживают одинаковые ключи, что несомненно является большим плюсом. Правда меня очень удивило, что наличие или отсутствие ключа /DEBUG нисколько не смущает ВБ, он всё равно добавляет в итоговый файл необходимую дебаговую информацию, а точнее ссылки на описания ошибок записанных в виртуальной машине, что только увеличивает размер файла. 2. Изучение процессы компиляции помогло разобраться в устройстве самой программы, откомпилированной в ВБ. Все надежды на то, что ВБ всё-таки делает полноценные ЕХЕ-файлы, развеялись, как дым. Как оказалось, весь бинарный код имплиментируется в некоторую оболочку из Vba6.dll. Вернее сказать, что Vbaexe6.lib вместе с основными функциями экспортирует огромное кол-во кода - какие-то классы, типы данных и т. п. Фактически в экзешник добавляется целая оболочка, которая и является цельным кодом, весь код, который пишут программисты, является почти что инструкциями интерпретатора, т.е. компилируется в бинарный код частично. Я выяснил, что все переменные хранятся не в сегменте данных, как в обычных ЕХЕ, а в специальном списке, который, видимо, создается динамически в процессе работы программы (именно этот метод позволяет ВБ создавать новые переменные в процессе работы программы при отсутствии инструкции Option Explicit). С ресурсами я не разобрался, там какая-то сложная система, но они походу тоже грузятся динамически из отдельного сегмента. Вот неполный список того, что экспортируется в ЕХЕ. _CIcos _adj_fptan _adj_fdiv_m64 _adj_fprem1 _adj_fdiv_m32 _adj_fdiv_m16i _adj_fdivr_m16i __vbaChkstk _adj_fpatan __vbaExceptHandler _adj_fprem _adj_fdivr_m64 __vbaFPException _adj_fdiv_m32i _adj_fdivr_m32i _adj_fdivr_m32 _adj_fdiv_r _CIatan _allmul Большинство ф-ий, такие как __adjust_fdiv, эспортируются полностью, вместе с кодом. Линкер использует ещё один объектный файл - natsupp.obj из Vbaexe6.lib. Кстати, компилятор ВБ, ну т.е. VB6.EXE, работает в режиме "автоматические заголовки компиляции", т.е. включает в obj-файл ссылки на все встречающиеся ф-ии. Но, что самое интересное, ВБ делает собственную таблицу превдонимов внутри кажного объектного файла. К примеру, CLng на самом деле называется _CIlog, а ф-ия Int имеет вид __vbaR8IntI2. У всех ф-ий есть характерный префикс _CI _CIsin _CIsqrt _CItan _CIexp ... что свидетельствует о принадледности ф-ий к некоторому интерфейсу, который без сомнения тоже экстпортируется в ЕХЕ. Представьте, как это замедляет работу приложения. 3. Мне так же удалось выяснить, что именно делает возможным создание библиотек в ВБ. Это можно сказать ноухау от SCINERа. Всё дело в переопределении точки входа в ДЛЛ. Дело в том, что, как оказалось, точкой входа (т.е. ф-ей, которая вызывается при работе с ДЛЛ в памяти) ВБ назначает __vbaS, которая экспортируется из файла ИмяПроекта.OBJ. Она сначала вызывает ряд ф-ий: VB@TEXT, VB@BTXT, VB@ETXT, VB@BSS. Последняя, кстати, вероятно инициализирует классы, которые предоставляют интерфейсы позволяющие создать элементы управления. При обходе данной процедуры этого не происходит. Именно по этому попытка в полученных ДЛЛ использовать формы или другие компоненты приводят к краху виртуальной машины. Затем уже вызывается некая ф-ия _WinmainStartup, а затем - процедура Main. У меня раньше тоже получалось экспортировать ф-ии из библиотеки с помощью def-файла, но у меня не получалось грамотно откомпилировать файл, т.к. назначение входной точкой стандартной ф-ии ВБА делало невозможным любой экспорт, т.к. вносило изменения в бинарную таблицу. На официальном сайте майкрософт написано, что все ф-ии в ВБ не поддерживают стандарт вызова __stdcall. Однако, как оказалось, все объявленные в модуле ф-ии имеют формат __stdcall или WINAPI, т.е. потенциально могут вызываться как обычные АПИ. Переопределение точки входа позволило обойти данный процесс и каким-то образом это позволили выполнить экспорт ф-ий, сохранив функциональность библиотеки, т.к. вызов вспомогательных ф-ий осуществляется на уровне интерпретатора. Что касается точки входа, то всё равно, как соответствующая ф-ия будет называться. Её можно назвать просто Hello, надо только указать её имя в ключе /ENTRY, главное, чтобы она принимала 3 параметра: Объявление в С: BOOL __stdcall DllMain(HINSTANCE hInst, DWORD Reason, LPVOID reserved) ВБ аналог: Function DllMain(hInst As Long, Reason As Long, reserved As Long) As Long где hInst - инстанция процесса, Reason - причина вызова ф-ии, reserved - зарезервированый параметр, который пока не используется. На самом деле она совсем не бесполезна. К примеру параметр Reason может принимать следующие значения: DLL_PROCESS_ATTACH = 1 - библиотека загружается в адресное пространство процесса DLL_PROCESS_DETACH = 0 - библиотека выгружается из адресного пространства процесса Ф-ия возвращает True (или 1) в случает удачного выполнения, False (или 0) - в случае ошибки, тогда библиотека загружена не будет. Целесообразно добавить в эту ф-ию проверку параметра Reason. Если DLL_PROCESS_DETACH, тогда надо уничтожать все созданные объекты, т.к. ни один объект не будет находится в разделенном сегменте данных (ВБ этого не поддерживает), т.е. не может быть использован другим приложением. 4. Как оказалось, не смотря ни на что, ВБ позволят таким "варварским" образом компилировать ActiveX и ActiveX DLL проекты. Причем, если говорить о последнем типе, то в нём естественно можно создавать классы для множественного использования, ну и так же экспортировать ф-ии. В итоге получается интересная библиотека, ф-ии из которой можно вызывать как АПИ, а так же импортировать из неё классы через Project->Reference, как из обычной ВБ-шной ДЛЛ. Это подобно тому, как работает msvbvm60.dll - она является СОМ-обектом, однако из неё можно вызывать ф-ии типа VarPtr, как из обычной АПИ-библиотеки. Однако тут открылся небольшой минус. Как я уже сказал, ВБ создает большое количество сегментов кода и данных в исполняемом файле: Из мапфайла: Start Length Name Class 0001:00000000 0000006cH .idata$5 CODE 0001:00000070 000004e0H .text CODE 0001:00000550 00000004H .text$0 CODE 0001:00000560 00000030H .text$1 CODE 0001:00000590 00000004H .text$2 CODE 0001:00000594 00000014H .idata$2 CODE 0001:000005a8 00000014H .idata$3 CODE 0001:000005bc 0000006cH .idata$4 CODE 0001:00000628 00000178H .idata$6 CODE 0001:000007a0 00000044H .edata CODE 0002:00000000 00000004H .data DATA 0002:00000008 000002c4H .bss DATA тут видать компоненты хранятся 0003:00000000 00000148H .rsrc$01 DATA 0003:00000150 00000780H .rsrc$02 DATA и возможно ф-ии объявленные в модуле находятся не в том сегменте, где расположены все классы. Модуль экспортирующий ф-ии является отдельным типом в ДЛЛ, но он не имеет своего CLSID, т.к. "не попадает" в нужный сегмент, таким образом стандартная ф-ия удаления зарегистрированной информации из реестра DLLUnregisterServer не сможет удалить инфорацию об этом типе из реестра, т.е. придется лазить по разделу TypeLib и удалять всё руками. 5. Лучше вообще не пользоваться в этой библиотеке такими ф-иями как New и CreateObject, т.к. создание любого объекта, размер данных которого превышает размер стека, т.е. 64 кб, приведет к краху приложения. Так же надо очень аккуратно проводить операции по копированию блоков памяти и выделению места в адресном пространстве процесса. 6. Большой плюс. Теперь в ВБ можно более ли менее работать с потоками. Из-за обхода некоторых ф-ий оболочки, библиотека стала более безопасной для многопоточных задач. 7. Так же несколько плюсов вытекает из доступных опций компиляции. К примеру Ещё одним интересным ключом является параметр /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]], он говорит виндам каким именно образом запускать исполняемый файл. Значение WINDOWS говорит линкеру, что это обычное виндовое приложение, WINDOWSCE значит, что апликуха будет работать под ЦЕ. Но большего внимания заслуживает значение CONSOLE, оно говорит, что прога должна запускаться в консоли. При запуске такого приложения, стандартный поток вывода переадресуется на консоль, т.е. GetStdHandle вернёт значение манипулятора консоли. Следовательно, на ВБ всё-таки можно делать консольные приложения. Но эта возможность пока только исследуется. 2 SCINERL: Моё предложение - сделать аддин, который автоматически, без указания деффайла, пробегался по всем модулям и экспортирует все ф-ии, которые не private. Работать людям будет удобнее. |
Сообщ.
#6
,
|
|
|
Впечетляет.
Спасибо за совет по аддину. Конкретней отвечу позже, когда разберу все прочитанное. |
Сообщ.
#8
,
|
|
|
Как говорится - кто ищет, тот всегда найдет.
Вообще-то этот пост надо было бы запихнуть в тему: "как создать консольное приложение на ВБ", но концепция, которую я собираюсь изложить, скорее относится к этой теме. Как я уже говорил, опции линкера ВЦ предусматривали запуск приложения разными способами. Так вот, оказалось, что линкер ВБ в этом плане полностью аналогичен линкеру ВЦ, т.е. он позволяет делать ЕХЕ с различными опциями подсистемы. Всё это делает возможным написание консольных приложений и в ВБ, причем в этих приложениях можно использовать формы и любые другие компоненты. Я приложил к посту наглядное пособие, а то вдруг кто-то не поверит. Как оно устроено? Просто. Проект состоит из одного единственного модуля, содержащего следующий код: Option Explicit Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long Private Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" (ByVal hConsoleOutput As Long, _ ByVal lpBuffer As String, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, _ lpReserved As Any) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const STD_OUTPUT_HANDLE = -11& Sub Main() Dim hConsole As Long Dim txt As String Dim num_written As Long 'получаем манипулятор стандартного потока вывода hConsole = GetStdHandle(STD_OUTPUT_HANDLE) If hConsole = 0 Then MsgBox "Couldn't allocate STDOUT" txt = "********************************" & vbCrLf & _ "* Concole application on VB! *" & vbCrLf & _ "* Created by Lamerroot. *" & vbCrLf & _ "********************************" & vbCrLf 'работаем, как с обычной консолью, хотя можно было использовать WriteFile WriteConsole hConsole, txt, Len(txt), num_written, vbNullString 'надо обязательно закрыть манипулятор при окончании работы CloseHandle hConsole End Sub Я компиляю проект, а затем линкую объектные файлы следующим образом: LINK путь\имя_проекта.OBJ путь\имя_модуля.OBJ путь\VBAEXE6.LIB /ENTRY:__vbaS /OUT:путь\Cons.exe /BASE:0x400000 /SUBSYSTEM:CONSOLE /VERSION:1.0 /INCREMENTAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078 Параметр VERSION зависит от версии среды ВБ. Получаю указанный файл Cons.exe. Ну, вот и всё. Все файлы, откомпилированные подобным способом, будут нормально работать с консолью. ЗЫ: Кстати, изучения опций линкования показало, что, как и в ВЦ, в исполняемый файл вместе с VBAEXE6.LIB можно включать и другие либы. К примеру, включение в ЕХЕ-файл либы ole32.lib (ставится вместе с ВЦ, папка \Lib) избавит от необходимости включать в инсталляционный пакет файл таблицы автоматизации OLE (OLE Automation) stdole2.tlb. А, скажем, изменение базового адреса входа (/BASE) способно уменьшить размер исполняемого файла. Прикреплённый файлCons.exe (16 Кбайт, скачиваний: 703) |
Сообщ.
#9
,
|
|
|
Теперь встает вопрос, как удалить ресурсы из DLL.
Они размер раздувают. А пользы 0. Добавлено в : Цитата надо модуль в рабочий ехе-проект вкомпиливать и проверять пошагово Вот, что я на это могу ответить: 1. Когда ActiveX делаешь, разве не тоже самое, надо встраивать в приложение, чтобы проверить. 2. Модуль проверить легче, чем AtiveX. Дальнейшие возражения не принимаются! |
Сообщ.
#10
,
|
|
|
2 SCINER, Lamerrot и всем: у меня предложение, давайте напишем програмулину которая будет заменять компилятор ВБ. Т.е. при компиляции будет вызываться она и в окне установив нужные параметры линковки, тогда без напряга можно будет получать необходимый исполняемый файл или компонент.
|
Сообщ.
#11
,
|
|
|
В первом посте обновление.
В меню появилась новая строка Make console exe Авторство сохранено за Lamerroot. Добавлено в : Цитата Uhri @ 12.08.04, 07:55 2 SCINER, Lamerrot и всем: у меня предложение, давайте напишем програмулину которая будет заменять компилятор ВБ. Т.е. при компиляции будет вызываться она и в окне установив нужные параметры линковки, тогда без напряга можно будет получать необходимый исполняемый файл или компонент. Дык уже все готово. Смотри в первом посте! |
Сообщ.
#12
,
|
|
|
Цитата Теперь встает вопрос, как удалить ресурсы из DLL. Они размер раздувают. А пользы 0. Неправда, ресурсы из ДЛЛ (даже откомпилированой подобным образом) загрузить можно. Только надо пользоваться не встроенными ф-иями ВБ, а чистыми АПИ для работы с ресурсами. Цитата Вот, что я на это могу ответить: 1. Когда ActiveX делаешь, разве не тоже самое, надо встраивать в приложение, чтобы проверить. 2. Модуль проверить легче, чем AtiveX. Всё правильно, Uhri загоняет. Не все же компоненты доступны в процессе создания проекта... И это нормально. Цитата 2 SCINER, Lamerrot и всем: у меня предложение, давайте напишем програмулину которая будет заменять компилятор ВБ. Т.е. при компиляции будет вызываться она и в окне установив нужные параметры линковки, тогда без напряга можно будет получать необходимый исполняемый файл или компонент. А чё ты сам не можешь написать? Я вот себе личную неаддиновскую аплику сделал, которая этим делом занимается. Там link заменять не надо, и мне просто с такой работать удобней. Ну сделай и ты себе прогу для компиляции на свой вкус. |
Сообщ.
#13
,
|
|
|
Вот ответ на твой биг-пост:
Ты написал, что данная реализация ведет себя нестабильно, т.к. нарушает некоторые аспекты компоновки. Я так понял, что ты имел в виду про обход стандартной процедуры точки входа. Если так, то да. Но. Я решил проверить стабильность. Создал DLL в VB (с функцией работающей с потоками)и начал вызывать процедуру из других языков таких как VC, Delphi, PowerBasic, ну и из самого VB конечно. При данном тестировании небыло замечено ни одного признака нестабильности. Все отработало как часы. 1. Ключ /DEBUG не не действует по той причине, что эта самая отладоная инфа уже лежит в .obj файле, созданная компилятором. 2. Ты утверждаешь, что такие функции, как __adjust_fdiv или __vbaR8IntI2 экспортируются с кодом. Плюс к тому они еще в составе какого-то интерфейса и экспортируются в EXE. Попробуй загляни в msvbvm. Все сомнения насчет этого отпадут разом! Там фугкции именно так и называются. Неможет быть такого, чтобы он таскал за собой msvbvm да еще и в себя их копировал. В этом случае экзешник был бы похож на дельфийский. 3. Пишешь, что главная процедура небесполезная. Это частично так. По ним можно ориентироваться создавать или уничтожать классы. Ну какая может идти речь о классах в модулях. В этой функции только одно полезно. С помощью ние можно посмотреть кто тебя вызвал и решить позволять ему пользоваться твоими функциями или нет. Вот и вся прелесть. 4. Все верно. Кстати а может по этому мап файлу может вырезать ненужные блоки. Например блок и ресурсами о версии DLL. 5. Я очень неаккуратно работал с Copymemory с блоками по 60 мег. Ничего страшного не происходило. Все стабильно. Ресурсы не глючат(тестировал на Win9X, Win2000, WinXProHome). Да и вообще действуют все те же правила, что и в простой VB-пограмме. 6. С потоками теперь можно работать не более или менее а полноценно, т.к. DLL находится не в адресном пространстве вызвавшей ее программы. 7. Мне кажется вопрос исчеран. Ты написал пример, а я добавил меню в аддине. Предложение тоже рассмотрено и реализовано. |
Сообщ.
#14
,
|
|
|
Сегодня постараюсь выложить.
А пока я обновил версию. В опциях теперь есть чекбокс уменьшения размера файла. Стандартная прога теперь весит где-то 7-8 кб. Причем данный чекбокс действует и на простые экзешки и на activex и на консольные, в общем на все. Сорри. Минимальный размер экзешек 5120 байт!!!, т.е. 6кб! Насчет табов заметано! |
Сообщ.
#15
,
|
|
|
Цитата Я решил проверить стабильность. Создал DLL в VB (с функцией работающей с потоками)и начал вызывать процедуру из других языков таких как VC, Delphi, PowerBasic, ну и из самого VB конечно. При данном тестировании не было замечено ни одного признака нестабильности. Все отработало как часы. Я как раз сказал, что с потоками библиотека работает нормально. Ты попробуй там СОМ-объекты посоздавать побольше. Приколешься. Цитата 1. Ключ /DEBUG не действует по той причине, что эта самая отладочная инфа уже лежит в .obj файле, созданная компилятором. Я это и сказал. Цитата 2. Ты утверждаешь, что такие функции, как __adjust_fdiv или __vbaR8IntI2 экспортируются с кодом. Плюс к тому они еще в составе какого-то интерфейса и экспортируются в EXE. Попробуй, загляни в msvbvm. Все сомнения насчет этого отпадут разом! Там фугкции именно так и называются. Не может быть такого, чтобы он таскал за собой msvbvm да еще и в себя их копировал. В этом случае экзешник был бы похож на дельфийский. Ну я же не говорил, что вот прямо полностью весь код всех ф-ий в ЕХЕ переноситься. Зато вот виртуальное объявление этих ф-ий как членов класса в ЕХЕ есть точно + какие-то ф-ии точно экспортируются полностью. Цитата 3. Пишешь, что главная процедура небесполезная. Это частично так. По ним можно ориентироваться создавать или уничтожать классы. Ну какая может идти речь о классах в модулях. В этой функции только одно полезно. С помощью нее можно посмотреть кто тебя вызвал и решить позволять ему пользоваться твоими функциями или нет. Вот и вся прелесть. Ну, это совсем не мало. Цитата 4. Все верно. Кстати, а может по этому мап файлу может вырезать ненужные блоки. Например, блок и ресурсами о версии DLL. Не я пробовал. Они находятся в другом сегменте данных. ВБ их не видит, как членов кода, т.е. откомпилировать проект будет невозможно. Мапфайл это чисто логи линковки. Ресурсы о версии можно удалить в последствии уже из готовой ДЛЛ стандартными АПИ или прикладной прогой, а так не знаю даже. Цитата 5. Я очень неаккуратно работал с Copymemory с блоками по 60 мег. Ничего страшного не происходило. Все стабильно. Ресурсы не глючат (тестировал на Win9X, Win2000, WinXProHome). Да и вообще действуют все те же правила, что и в простой VB-пограмме. Причем тут CopyMemory? Я говорю про GlobalAlloc, VirtualAlloc, HeapAlloc и т.д. Цитата 6. ... т.к. DLL находится не в адресном пространстве вызвавшей ее программы. Та конечно, а где она, по-твоему, тогда находится? Любая библиотека динамической компоновки загружается в адресное пространство процесса, который её вызвал (это на уровне ОС). Так что ты шутишь. |
Сообщ.
#16
,
|
|
|
to SCINER:
К сожалению никак не могу заставить работать твой AddIn. DLL не компилируются, при запуске компиляции появляется месанджбокс "Bad file name or number". У меня на вижул студии стоит 6 сервис пак. Может из-за этого? |
Сообщ.
#17
,
|
|
|
Цитата SCINER @ 17.08.04, 09:21 А как ты его устанавливал. Соблюдал ли все шаги описанные в ридми ? Стоит софт Visual Studio 6 SP6, Windows2000 build 5.00.2195 SP4. Addin устанавливал по инструкции, консольные программы компилируются нормально.При попытке копиляции тестового прожекта DLL.VBP появлялся месенджбокс "Bad file name or number". Деинсталлировал Addin, переустановил VS и SP6, заново установил Addin. Ура! Заработала. DLL наконец появилась. Компилирую Проверка.vbp, запускаю. Жму на кнопочку ADD появляется сообщение об ошибке: "Run-time error 453. Can`t find DLL entry point ADD in dll" Натравливаю на эту DLL "Stud_PE Analizator", он показывает девственно чистый раздел экспорта... "Number of exported Functions - 0" Абыдно понимаешь... Очень хочется нормальные DLL на VB писать.. |
Сообщ.
#18
,
|
|
|
Это мой глюк, точно!
Надо было так: VBInstance.ActiveVBProject.BuildFileName а я написал так: VBInstance.ActiveVBProject.Name В результате заместо c:\progman\vb\dll\mydll.vbd в линкер посылалось mydll.vbd разница очевидна Это только в последней версии, седня обновлю! |
Сообщ.
#19
,
|
|
|
SCINER:
Цитата Её и не должно было быть. Какая разница, как называется эта функция? VB её даже не экспортирует (да и зачем?).Я так понял, что ты имел в виду про обход стандартной процедуры точки входа. Если так, то да. Но. Я решил проверить стабильность. Создал DLL в VB (с функцией работающей с потоками)и начал вызывать процедуру из других языков таких как VC, Delphi, PowerBasic, ну и из самого VB конечно. При данном тестировании небыло замечено ни одного признака нестабильности. Все отработало как часы. Цитата Народ, вы что, думаете, что линкер просто "соединяет" obj-файлы и прописывает заголовок? Если отладочная инфа есть в obj'е, то это не значит, что она должна попасть в EXE-шник/DLL-ку. Линкер сам выбирает, что ему кидать в EXE-шник из obj'а, а что нет.1. Ключ /DEBUG не не действует по той причине, что эта самая отладоная инфа уже лежит в .obj файле, созданная компилятором. Цитата А также удаление временных файлов, восстановление каких-то параметров, сохранение установок и т.д... в зависимоти от задач модуля В этой функции только одно полезно. С помощью ние можно посмотреть кто тебя вызвал и решить позволять ему пользоваться твоими функциями или нет. Вот и вся прелесть. Цитата Гы! А если создать в VB обычный пустой проект, скомпилить и упаковать UPX'ом, то он тоже будет 5120 байт Сорри. Минимальный размер экзешек 5120 байт!!!, т.е. 6кб! Lamerroot: Цитата Может, я торможу, но что-то я не понял, причём тут стек? И причём тут 64kb, когда размер стека растягивается до метра?5. Лучше вообще не пользоваться в этой библиотеке такими ф-иями как New и CreateObject, т.к. создание любого объекта, размер данных которого превышает размер стека, т.е. 64 кб, приведет к краху приложения. Так же надо очень аккуратно проводить операции по копированию блоков памяти и выделению места в адресном пространстве процесса. Цитата Та конечно, а где она, по-твоему, тогда находится? Любая библиотека динамической компоновки загружается в адресное пространство процесса, который её вызвал (это на уровне ОС). Так что ты шутишь. p.s. Кстати, ничего, что... 1. При первом запуске после установки add-in'а VB выдал мне мессагу: "Method '~' of object '~' failed." ? 2. Пункт "Компиляция" появился не сразу, а после того, как я нажал на "Make DLL" 3. Frame "Настройки компиляции" (со всем содержимым) не... эээ... англифицируется 4. При создании проекта выбрал "DLL", увидел функции DLLMain и Main (зачем, кстати, вторая?). Решил откомпилить, но нашёл только Make EXE. Подумал, вдруг так и надо. Откомпилил. Файл по-прежнему EXE. Заглянул внутрь. Файл не-DLL. Так, в чём прикол-то? |
Сообщ.
#20
,
|
|
|
Еще вопрос по консольным приложениям.
К примеру, хочу я написать прогу типа FAR`а. С текстовым интерфейсом. Ну и мне нужно обрабатывать события в консоли. Нажатие клавишь, мышь и т.п. Как реализовать обработку событий в консольном окне? Вопрос довольно интересный... |
Сообщ.
#21
,
|
|
|
Цитата p.s. Кстати, ничего, что... 1. При первом запуске после установки add-in'а VB выдал мне мессагу: "Method '~' of object '~' failed." ? 2. Пункт "Компиляция" появился не сразу, а после того, как я нажал на "Make DLL" 3. Frame "Настройки компиляции" (со всем содержимым) не... эээ... англифицируется 4. При создании проекта выбрал "DLL", увидел функции DLLMain и Main (зачем, кстати, вторая?). Решил откомпилить, но нашёл только Make EXE. Подумал, вдруг так и надо. Откомпилил. Файл по-прежнему EXE. Заглянул внутрь. Файл не-DLL. Так, в чём прикол-то? Специально, форматнул винт, установил Win2000 и Win98 буду проверять! Добавлено в : Цитата Alex221 @ 18.08.04, 09:40 Еще вопрос по консольным приложениям. К примеру, хочу я написать прогу типа FAR`а. С текстовым интерфейсом. Ну и мне нужно обрабатывать события в консоли. Нажатие клавишь, мышь и т.п. Как реализовать обработку событий в консольном окне? Вопрос довольно интересный... Цитата Еще вопрос по консольным приложениям. К примеру, хочу я написать прогу типа FAR`а. С текстовым интерфейсом. Ну и мне нужно обрабатывать события в консоли. Нажатие клавишь, мышь и т.п. Как реализовать обработку событий в консольном окне? Вопрос довольно интересный... Сам думай! Добавлено в : Все работает, не гони Добавлено в : Цитата Jin X @ 18.08.04, 09:29 SCINER: Цитата Её и не должно было быть. Какая разница, как называется эта функция? VB её даже не экспортирует (да и зачем?).Я так понял, что ты имел в виду про обход стандартной процедуры точки входа. Если так, то да. Но. Я решил проверить стабильность. Создал DLL в VB (с функцией работающей с потоками)и начал вызывать процедуру из других языков таких как VC, Delphi, PowerBasic, ну и из самого VB конечно. При данном тестировании небыло замечено ни одного признака нестабильности. Все отработало как часы. Цитата Народ, вы что, думаете, что линкер просто "соединяет" obj-файлы и прописывает заголовок? Если отладочная инфа есть в obj'е, то это не значит, что она должна попасть в EXE-шник/DLL-ку. Линкер сам выбирает, что ему кидать в EXE-шник из obj'а, а что нет.1. Ключ /DEBUG не не действует по той причине, что эта самая отладоная инфа уже лежит в .obj файле, созданная компилятором. Цитата А также удаление временных файлов, восстановление каких-то параметров, сохранение установок и т.д... в зависимоти от задач модуля В этой функции только одно полезно. С помощью ние можно посмотреть кто тебя вызвал и решить позволять ему пользоваться твоими функциями или нет. Вот и вся прелесть. Цитата Гы! А если создать в VB обычный пустой проект, скомпилить и упаковать UPX'ом, то он тоже будет 5120 байт Сорри. Минимальный размер экзешек 5120 байт!!!, т.е. 6кб! Lamerroot: Цитата Может, я торможу, но что-то я не понял, причём тут стек? И причём тут 64kb, когда размер стека растягивается до метра?5. Лучше вообще не пользоваться в этой библиотеке такими ф-иями как New и CreateObject, т.к. создание любого объекта, размер данных которого превышает размер стека, т.е. 64 кб, приведет к краху приложения. Так же надо очень аккуратно проводить операции по копированию блоков памяти и выделению места в адресном пространстве процесса. Цитата Та конечно, а где она, по-твоему, тогда находится? Любая библиотека динамической компоновки загружается в адресное пространство процесса, который её вызвал (это на уровне ОС). Так что ты шутишь. p.s. Кстати, ничего, что... 1. При первом запуске после установки add-in'а VB выдал мне мессагу: "Method '~' of object '~' failed." ? 2. Пункт "Компиляция" появился не сразу, а после того, как я нажал на "Make DLL" 3. Frame "Настройки компиляции" (со всем содержимым) не... эээ... англифицируется 4. При создании проекта выбрал "DLL", увидел функции DLLMain и Main (зачем, кстати, вторая?). Решил откомпилить, но нашёл только Make EXE. Подумал, вдруг так и надо. Откомпилил. Файл по-прежнему EXE. Заглянул внутрь. Файл не-DLL. Так, в чём прикол-то? Все работает! скачай последнее обновление |
Сообщ.
#22
,
|
|
|
Я и не спорю, что работает (ты лучше повнимательнее почитай, что я написал, я там и не говорил, что не работает, просто есть замечания), но то, что я описал, я же не сам придумал.
Видимо, я просто не понял, как создать DLL-ку. Запускаю VB, выбираю "DLL", открываю "modDLL"... ах вон что! Нужно через "компиляцию" компилить! А я-то думал, что стандартно Добавлено в : Неее, не всё так просто! Теперь так. Запускаем VB (делаю всё параллельно написанию этого текста), выбираем "DLL", затем "modDLL", создаём Sub xyz():MsgBox "hi!":End Sub. File/Компиляция... тьфу, блин, забыл сохраниться... File/Save..., File/Компиляция. Выбираю функцию xyz, жму OK. Указываю файл (по умолчанию DLL.exe, кстати). DLL-ка скомпилена! Ура! А теперь проверим её. Жмём просмотр, поиск, "xyz"... найден, что радует. Делаем прогу, вызывающую процедуру. Запускаем. Ошибка. Так, через OllyDBG, модуль загрузили, адрес процедуры получили, call eax (заходим внутрь). Идём, идём... ошибень! Ладно, может, я накосячил? Делаем на Delphi procedure...external.... Запускаем. Опять всё нормально. Ok, лезем в файл через hiew. F8, F2, смотрим "File is DLL: YES". Хм... почему ж не работает? Почему не работает? Чтоб не быть голословным, вот вам мой проект. Прикреплённый файлproject1.zip (26.15 Кбайт, скачиваний: 282) |
Сообщ.
#23
,
|
|
|
Вообще, надо бы, чтоб всё было чётко при "стандартной" компиляции, если это возможно.
А то когда делаешь File/Make DLL.dll, делается exe-шник, без экспортов и т.д. p.s. Кстати, если в dll-ке (имеется в виду вообще в исходнике) нет экспортируемых функций (DLLMain не в счёт), то это не значит, что она не имеет право на существование! К тому же, для чего нужна функция main? |
Сообщ.
#24
,
|
|
|
Спасибо насчет 2-х советов по улучшению аддина.
Однако я проверив твою DLL был в шоке! Раньше-то все работало...вроде Я в дельфях не спец, но написал динамический вызов (может неправильно): uses Windows, SysUtils; //procedure xyz; stdcall; external 'dll.dll'; var hDll:longint; pProc:pointer; begin //xyz hDll := LoadLibrary('dll'); pProc := GetProcAddress(hDll, 'xyz'); hDll := CallWindowProc(pProc,0,0,0,0); FreeLibrary (hDll); end. но и с помощью него вылетает таже ошибка, однако тот-же код на VB работает четко: Dim hDll As Long, pProc As Long hDll = LoadLibrary("dll") pProc = GetProcAddress(hDll, "xyz") pProc = CallWindowProc(pProc) FreeLibrary hDll Что-же это может быть? |
Сообщ.
#25
,
|
|
|
uses Windows, SysUtils; //procedure xyz; stdcall; external 'dll.dll'; var hDll:longint; pProc:procedure; {stdcall}; может быть надо поставить begin //xyz hDll := LoadLibrary('dll'); pProc := GetProcAddress(hDll, 'xyz'); pProc; FreeLibrary (hDll); end. |
Сообщ.
#26
,
|
|
|
И что это за код? Всё равно он не работает.
Видимо, дело в том, что процедура в DLL вызывает что-то. Если MsgBox убрать, то будет всё нормально. Это какие-то MS VB-шные штучки... |
Сообщ.
#27
,
|
|
|
Вы вообще мои посты читали? Я там про точку вхождения кое-что писал.
Попробуйте сдеалть так: Переименовать ф-ию DLLMain, скажем, в Entry. Ну и откомпилять файл с ключом /ENTRY:Entry. Msgbox должен работать. Или можно, к примеру, воспользоваться API ф-ией MеssageBox. Она будет работать. А вообще в таких ДЛЛ нет никакой пользы т.к. процедура "Set obj = New Obj" приводит к немедленному краху ВБ. Лучше уже делать всё на старом добром ВЦ. |
Сообщ.
#28
,
|
|
|
А лучше во всем разобраться и довести все до ума
|
Сообщ.
#29
,
|
|
|
Lamerroot, да, читали. И что с того? Почему при переименовании будет работать? Ты писал, что __vbaS вызывает разные функции, а затем Main, а если мы переопределяем точку входа, что будет вызываться только DLLMain или что-то ещё (которая уже ничего не вызывает... по идее в этом и должна быть проблема). Причём тут имя вообще?
|
Сообщ.
#30
,
|
|
|
Цитата А лучше во всем разобраться и довести все до ума Уж слишком это всё глючно работает, врядли это вообще до чего-нибудь можно довести. Цитата Причём тут имя вообще? Просто попробуй... |
Сообщ.
#31
,
|
|
|
А объяснить никак?
Может, тогда и появится мысль, как довести? |
Сообщ.
#32
,
|
|
|
Кого довести?
|
Сообщ.
#33
,
|
|
|
Цитата Lamerroot, 22.08.04, 13:45 Уж слишком это всё глючно работает, врядли это вообще до чего-нибудь можно довести. |
Сообщ.
#34
,
|
|
|
И у меня тоже, ничего так и не заработало.
Косяк какойто |
Сообщ.
#35
,
|
|
|
Неговори. Ну хоть консольные апликухи прекрасно работают.
|
Сообщ.
#36
,
|
|
|
А еще размер прог уменьшился и длл-ки хотябы для самого васика писать можно !
Но я все равно стараюсь все по грамотному сделать! |
Сообщ.
#37
,
|
|
|
Да плевать на этот размер! Сколько вы там сэкономите? 10kb? В ущерб стабильности...
|
Сообщ.
#38
,
|
|
|
Чуваки, слышал я, что Вы тут компайлер вместо ВБ писать хотели, кот. мусора всякого в екзешники не кидает, ну так как?
|
Сообщ.
#39
,
|
|
|
Хотел!Хочу!
А ты чем-то можешь помочь? |
Сообщ.
#40
,
|
|
|
А чем нужно? Я неплохо програмлю на VB, учусь(сам!) на C++ и Асме...
|
Сообщ.
#41
,
|
|
|
При вызове DLL написанной на VB из программы написанной на другом языке прога рухнет.
Потому что VB требует загруженного msvbvm60. Как ее можно загрузить ? |
Сообщ.
#42
,
|
|
|
LoadLibrary('msvbvm60.dll');
|
Сообщ.
#43
,
|
|
|
А вдруг поможет. Надо попробовать..
|
Сообщ.
#44
,
|
|
|
Начнем с того, что DLL'ки вообще не компайлятся (консольные апликухи нормально(даже хорошо!), но вот... ),а посему я не имел возможности протестить сие "чудо проироды" на др. языках . Но Andrey был прав - почаще смотри в API-вьювер:
сначала Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long потом LoadLibrary("msvbvm60.dll") *** Ну так как на счет компайлера??? |
Сообщ.
#45
,
|
|
|
Цитата - За кого меня принимаешь ? сначала Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Почему ДЛЛ-ки не компиляться ? Хоть что-то пишется, нет ??? |
Сообщ.
#46
,
|
|
|
Ну не за лаймера-же!!!
*** Насчет dll'ок - ничего не пишется, никаких сообщений и на диске ничего нет (хотябы отдаленно напоминающего DLL), хотя все ОК. Только не спрашивай правильно-ли я инсталировал аддин. |
Сообщ.
#47
,
|
|
|
Цитата хотябы отдаленно напоминающего DLL а файл [project_name].vbd создается ? |
Сообщ.
#48
,
|
|
|
Да, помоему... а он-то здесь причем??? Мне длл нужна!!!
|
Сообщ.
#49
,
|
|
|
Это Def-файл. Есть или нет ????????
|
Сообщ.
#50
,
|
|
|
VBD есть ... но ... мне dll нужна!!!
... Кстати, я конечно понимаю, что все программисты "очень скромны" но все и без Цитата ;********************************************************************* ; This is the .VBD file for the Microsoft Visual Basic 6.0 StdCall DLL ; Copyright ©2004 SCINSoft Corporation ; Created by SCINER: lenar2003@mail.ru ; All rights reserved. ;********************************************************************* знают что сей аддин написал SCINER! |
Сообщ.
#51
,
|
|
|
Блин! А может у тебя паки какие-то ? А может, а может, а может..... прсто ты ее не видишь. в смысле их же по умолчанию не видно Добавлено в : А если серьезно. То я посмотрю. Может на самом деле баги есть... Добавлено в : У меня тоже не создавалась. Я понял почему: 1. Если создавать новый проект DLL, тогда в файле проекта (после его сохранения) я вижу такое: Цитата Type=Exe Reference=*\G{....tlb#Standard OLE Types Module=modDLL; modDLL.bas Startup="Sub Main" HelpFile="" Title="ActiveX Document EXE" ExeName32="vbnew.dll" Path32="..\..\..\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VB98\Template\Projects" Т.е. компилируемая библиотека сохранялась в папку Projects. Исправил, но опять DLL-ку не увидел, потому-что она была сохранена под именем vbnew.EXE. Жестко прописал vbnew.dll все нормально сохранилась и я е наконец-то увидел! Может у тебя тоже самое ??? |
Сообщ.
#52
,
|
|
|
M Тема перенесена из Visual Basic -> Visual Basic. Общие вопросы. |
Сообщ.
#53
,
|
|
|
Так ты компайлер писатьт собираешься!!! И еще, баги нашел?, исправил?, а ссылку обновил???!!!
|
Сообщ.
#54
,
|
|
|
А ты мой пост прочитал ?
У тебя запустился, нет ? |
Сообщ.
#55
,
|
|
|
Да да да есть екзешник ... хотя должна быть длл'ка :-)
А ты глюк исправил? Обновил ссылку? |
Сообщ.
#56
,
|
|
|
Так ведь нет никаких глюков!
Просто жестко пропиши при компиляции путь к желаемой DLL'ке например так: c:\my_dll.dll и все будет OK! |
Сообщ.
#57
,
|
|
|
Внатуре работает!!! Молоток SCINER!
... А вот аплеты панели управления не компайлятся...надо не *.apl а *.cpl, но изменение расширения ничего не дает, как аплеты делать? |
Сообщ.
#58
,
|
|
|
Цитата System @ 26.09.04, 13:46 Внатуре работает!!! Молоток SCINER! ... А вот аплеты панели управления не компайлятся...надо не *.apl а *.cpl, но изменение расширения ничего не дает, как аплеты делать? apl - это скорее всего опечатка они компилятся но при запуске вылетают с ошибкой ошибка таже, что и при использованиии DLL из других языков программирования (т.е. нет загруженной msvbvm60.dll) |
Сообщ.
#59
,
|
|
|
А у меня они вообще не работают! Даже error'а не вылетает!
|
Сообщ.
#60
,
|
|
|
я знаю так и должно быть
ссылку давно не обновлял т.к. имхо не стоит раз все равно не работает но я все еще пытаюсь это дело довести до конца |
Сообщ.
#61
,
|
|
|
Но обычно, когда запускаешь без этой долбаной vb длл'ки, то программа ругается что ее(длл'ки) нет и выгружается...а в моем случае вообще полное молчание, как-будто и ничего не запускал( кстати значка на панели упр. тоже не появляется).
|
Сообщ.
#62
,
|
|
|
значок и не появится.
т.к. апплет рушится в момент инициализации (невозможно выполнить ни одной vb-функции потомучто нет этой dll-ки) вот код апплета: Private Const NUM_APPLETS = 1 #If Win32 Then Const CPL_DYNAMIC_RES = 0 #End If Private Const CPL_INIT = 1 Private Const CPL_GETCOUNT = 2 Private Const CPL_INQUIRE = 3 Private Const CPL_SELECT = 4 Private Const CPL_DBLCLK = 5 Private Const CPL_STOP = 6 Private Const CPL_EXIT = 7 Private Const CPL_NEWINQUIRE = 8 #If Win32 Then Private Const CPL_STARTWPARMS = 9 #End If Private Const CPL_SETUP = 200 Type TCplInfo idIcon As Integer idName As Integer idInfo As Integer lData As Long End Type Type TNewCplInfoA dwSize As Long dwFlags As Long dwHelpContext As Long lData As Long IconH As Long szName(31) As Byte szInfo(63) As Byte szHelpFile(127) As Byte End Type Type TNewCplInfo dwSize As Long dwFlags As Long dwHelpContext As Long lData As Long IconH As Long szName(31) As Byte szInfo(63) As Byte szHelpFile(127) As Byte End Type Type PNewCplInfo dwSize As Long dwFlags As Long dwHelpContext As Long lData As Long IconH As Long szName(31) As Byte szInfo(63) As Byte szHelpFile(127) As Byte End Type #If Win32 Then Type TNewCplInfoW dwSize As Long dwFlags As Long dwHelpContext As Long lData As Long IconH As Long szName(63) As Byte szInfo(127) As Byte szHelpFile(255) As Byte End Type Dim PNewCplInfoW As TNewCplInfoW #End If Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As String) As Long Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Dim PCplInfo As TCplInfo Dim PNewCplInfoA As TNewCplInfoA Dim CplInfo As TCplInfo Function CPlApplet(hwndCPL&, uMsg&, lParam1&, lParam2&) As Long WinExec "calc", 1 'ShellExecute 0, "Open", "notepad", "", "", 1 Select Case uMsg Case CPL_INIT CPlApplet = 1 Exit Function Case CPL_GETCOUNT CPlApplet = NUM_APPLETS Case CPL_INQUIRE CplInfo.idName = 101 CplInfo.idInfo = 102 CplInfo.idIcon = 101 CopyMemory ByVal lParam2&, CplInfo, Len(CplInfo) CPlApplet = 1 Case CPL_NEWINQUIRE PNewCplInfoA.dwSize = Len(PNewCplInfoA) PNewCplInfoA.dwHelpContext = 0 PNewCplInfoA.lData = 0 PNewCplInfoA.IconH = LoadIcon(App.hInstance, "101") 'PNewCplInfoA.szName = "TestCPL", vbFromUnicode 'PNewCplInfoA.szInfo = "My Test CPL" PNewCplInfoA.szHelpFile(0) = 0 CopyMemory ByVal lParam2&, PNewCplInfoA, Len(PNewCplInfo) CPlApplet = 1 Exit Function Case CPL_SELECT CPlApplet = 0 Exit Function Case CPL_DBLCLK Shell "notepad.exe", vbNormalFocus CPlApplet = 1 Exit Function Case CPL_STOP CPlApplet = 0 Exit Function Case CPL_EXIT CPlApplet = 0 Exit Function Case Else CPlApplet = 0 End Select End Function |
Сообщ.
#63
,
|
|
|
Это вот мой скромненький вклад в разработку AddIn'а. Говорили о многоязыковой поддержке? Вот вам файл украинского языка для DLL
Прикреплённый файлukrainian.rar (0.56 Кбайт, скачиваний: 222) |
Сообщ.
#64
,
|
|
|
У меня вот такой вопрос, может я где в теме это и пропустил, если да, то извините.
Этот Addin можно свободно исползовать ? Т.е. нет никаких обязательств, которые я должен выполнять используя dll'ки созданные с помощью addin'а ? Также хочется сказать спасибо автору данного addin'а, это вещица очень удобна и проста в использовании, а также пока что не даёт сбоев (по крайней мере у меня их пока не было) |
Сообщ.
#65
,
|
|
|
Цитата Spawn™Production®,5.10.04, 16:11 У меня вот такой вопрос, может я где в теме это и пропустил, если да, то извините. Этот Addin можно свободно исползовать ? Т.е. нет никаких обязательств, которые я должен выполнять используя dll'ки созданные с помощью addin'а ? Также хочется сказать спасибо автору данного addin'а, это вещица очень удобна и проста в использовании, а также пока что не даёт сбоев (по крайней мере у меня их пока не было) Приятно такое читать! Ничего не пропустил этот вопрос нигде не обсуждался. Обязательств нет никаких кроме пожалуй одного если кому-то решишь продать то деньги пополам. Мне бы помощника для раскрутки и продажи. Вещь-то мощная. Никакая-то там игрушка или будильник это-ж большое достижение! Поэтому и покупаться должно на Ура! Если будут баги или какие-то предложения срочно пиши сюда. Попытаюсь все уладить. Добавлено Цитата Seriy-Coder,5.10.04, 15:32 Это вот мой скромненький вклад в разработку AddIn'а. Говорили о многоязыковой поддержке? Вот вам файл украинского языка для DLL Благодарю за перевод. Переводов бы побольше. Кстати у тебя там в переводе двух значений не хватает: Українська|Компіляція|Укажіть єкспортуемі функції:|ОК|Відміна|Опціі|Виділіть все|Шлях:|Компилювання DLL|Створити *.map файл.|Записувати функції в сгоді з алфавитом (не в черговості ордіналу^)|Дії при відсутності функціі DllMain() чи Main() |Показувати попередження|Добавляти автоматично|В першу чергу сохраніть проект|В проекте немае модулей|Немае функції DllMain() та Main().|Не знаїдена функція Main().|Не знаїдена функція DllMain().|Добавити ?|Немае процедур|Виділіть хоч одну процедуру|Помилка|Опис|Виберіть дії|Швидка компіляція (єкспортуються тільки PUBLIC процедури)|Настроїть функції|Зробити консольне приложення|Уменьшить размер выходного файла|Тільки PUBLIC|DLL|Консольне приложення|Цеї вид компіляціі не мае параметрів|Настроїки компіляції|Программи|DLL Бібліотеки|Аплети панелі кирування|Усі файли|Разрешить создавать пустые DLL И еще, можно вот это как-то сократить (может как то перефразировать даже) Записувати функції в сгоді з алфавитом (не в черговості ордіналу^) а то не красиво выглядит неумещаясь в рамку. |
Сообщ.
#66
,
|
|
|
Вот такую фишку было бы не плохо поправить. Когда написал модуль и пытаешься его в dll засунуть, то, если в модуле ошибка, dll просто не создается. Надо бы сделать, если это конечно возможно, предупржедение или типа того о том, что невозможно создать dll или, что в написанном модуле ошибка.
Цитата(SCINER @ 5.10.2004, 01:46) Цитата Мне бы помощника для раскрутки и продажи. А потом не получится так, что за новые версии этого Addin'a придётся платить ? |
Сообщ.
#67
,
|
|
|
Ув. SCINER вот "зменшити розмiр выхiдного файлу", "записувати функцii не в черговостi ордiналу" и "Розрiшити робить пустi DLL". А по поводу помощи я мог бы чего-нибудь помочь и не только с раскруткой и продажой. Ну мой ящик есть если чё... или на форуме скажи.
|
Сообщ.
#68
,
|
|
|
Своим всегда бесплатно...
Вопрос: Как начать его продавать. Я думаю затравки ненадо. Сразу только на продажу и за высокую цену. Деньги поровну. |
Сообщ.
#69
,
|
|
|
Чем торгуем? Недаделаным Аддином? Я так понял, что длл из приложений не использующих msvbvm6.dll вызываться не будет?
|
Сообщ.
#70
,
|
|
|
ребята, не страдайте фигнёй. всё это уже давно имеется - http://www.vbadvance.com/i. и всего $39.
|
Сообщ.
#71
,
|
|
|
упс... т.е. http://www.vbadvance.com/
|
Сообщ.
#72
,
|
|
|
Минусы: Закладка Exports заблокирована (ниче не смог с этим поделать) DLL не компилится Куча ненужных опций Сложный интерфейс Отсутствие удобных функций группировки функций Нет русского языка Плюсы: Помоему умеет вставлять манифест PS Я так и не понял, он может компилить DLL которые можно юзать из других языков ? |
Сообщ.
#73
,
|
|
|
M Сторонние продукты обсуждаем тут: VBAdvance... В этой теме обсуждаем только аддин от SCINER! |
Сообщ.
#74
,
|
|
|
Могу помочь с созданием Shareware версии AddIn'a для традиционного 30 дневного ознакомления с продуктом (ну или Trial) че угодно... Так че на счет сотрудничества? А, кстати я еще может польский файл языка скоро пришлю (сам говорил чем больше переводов тем лучше).
|
Сообщ.
#75
,
|
|
|
30 дней много.
Надо максимум на неделю. Насчет языка отлично. Мне очень нужна помощь в раскрутке и советы по видам оплаты. Как лучше брать денюшки. |
Сообщ.
#76
,
|
|
|
Файл польского языка почти готов. А че с Trial версией? Будем чего-нибудь делать?
|
Сообщ.
#77
,
|
|
|
Для триала я думаю идеальным решением будет Orien ?
Как думаешь ? |
Сообщ.
#78
,
|
|
|
Вот польский файл языка.
А по поводу защитя я чё думаю. Может стоит свой тип защиты написать? Ато не прет как-то чужими пользоваться как думаешь? Я против ориена ничего не имею, но мне кажется свое лучше Прикреплённый файлPOLSKI.txt (1.63 Кбайт, скачиваний: 342) |
Сообщ.
#79
,
|
|
|
Есть такая трабла. Когда я сохраняю свою библиотеку и в папке, где я это дело сохраняю есть файл с таким же названием, то расширение мой библиотеки становится не dll, а таке же как и расширение уже существующего файла. Было бы не плохо, чтобы к окне сохранения файла после самого названия стояло .dll
|
Сообщ.
#80
,
|
|
|
Seriy-Coder: Спасибо за перевод. От ориена я отказываюс. Он в XP у меня сглючил.
После первого же запуска написал, что демо период закончился. Только я представления не имею как написать свою хорошую защиту. Spawn™Production®: Ok, я давно уже это заметил, просто никто не жаловался. Буду исправлять. |
Сообщ.
#81
,
|
|
|
Чего-нибудь придумаем. Давай сначала определимся с типом защиты.
Например, что будет происходить у незарегистрировавшегося пользователя (в откомпилинной ДЛЛ выдается сообщение типа "А вот эта вот ДЛЛ-ка была откомпилирована на незарегистрированной копии и т.д.", либо не позволять компилить файлы размером более 10 КБ и т.п.). Вобщем подумай чего будет лучше и напиши. Потом будем определяться как это реализовать. |
Сообщ.
#82
,
|
|
|
SCINER
Правда есть один нюанс, если человек отключит у себя опцию "скрывать расширения для зарегистрированных типов файлов", то расширение *.dll будет автоматически ставится в конце названия файла. |
Сообщ.
#83
,
|
|
|
Запретить вставлять в библу больше 1-ой функции.
Помоему действенная мера ??? |
Сообщ.
#84
,
|
|
|
Только одна функция? нехватит
|
Сообщ.
#85
,
|
|
|
Привет всем!
С большим интересом наблюдаю за темой. Аддин от Скинера явный рулез, причем форева, сомнений нет. Если дело каснулось продажи, и соответственно, защиты, разрешите мне высказать мое мнение. Думаю, уважаемое общество поверит, что я немного знаю толк в защите ЕХЕ файлов 1) Упаковщики в целом и Ориен в частности. Сразу нужно быть готовым что любой даже самый супер-пупер упаковщик типа Obsidium или Armadillo снимут. Это вопрос времени. Для того=же Obsidium уже есть полностью автоматический распаковщик, Армадилла снимается елементарно при минимальных знаниях ассемблера и уменяи работать с отладчиком. Кроме того ограничения по времени ВСЕ известные мне упаковщики организовывают очень паршиво. Они пригодны ТОЛЬКО для защиты бинароного кода программы от внесения изменений в ее логику. Даже не надейтесь, что триальные ограничения, предоставляемые паковщиками смогут продержаться Ориен, это вообще другая тема - шифровка кода вери гуд, всякие ограничения - хуже некуда. 2) Самозащита программы. Все основные элементы защиты должны быть реализованы в самой программе, многоуровневые проверки, мощная логика, нетрадиционные алгоритмы реализации (SCINER, если тебя это интересует, пиши мне einsoft@mail.ru, расскажу подробно, что я имею в виду и как это воплотить в жизнь). В защите НЕ должно быть никаких IF-ов. Если в конце-концов логика вашей программы приведет к тому, что IF <ряд условий совпадает> THEN <программа зарегистрирована> ELSE <триал> - то это не защита вовсе, а так, развлечение. 3) Разные куски защиты должны писать разные люди. У каждого автора свой стиль программирования и свой тип мышления. Если автор напишет 5 способов проверки, все они хоть чем-то но будут похожи. Так что лучше, пусть 5 авторов напишут по 1 варианту защиты, а потом склеят все вместе. Одним из пяти вполне могу стать я 4) Не нужно забывать о благотворительности Я понимаю, что более 90% работы по аддону SCINER делает сам, но все равно, бесплатная регистрация для всех, кто присутствует в данном топике, и вообще, для поддерживающих эту тему должна быть! Думаю, меня поддержат. Я лично готов всячески помочь в обеспечении грамотной защиты и могу предложить несколько неплохих (на мой взгляд) "открытых" мною способов нестандартной защиты приложения. --- С ув. Einstein. MailTo: einsoft@mail.ru URL: http://www.einsoft.tk/ |
Сообщ.
#86
,
|
|
|
Цитата Enstain @ 28.11.04, 00:06 Армадилла снимается елементарно при минимальных знаниях ассемблера и уменяи работать с отладчиком Ага вообще просто делать нечего его снять... Ты что? опомнись... его только единицы могут снять |
Сообщ.
#87
,
|
|
|
Цитата Andrey_Kun @ 28.11.04, 06:52 Ага вообще просто делать нечего его снять... Ты что? опомнись... его только единицы могут снять Я же не говрою полностью вручную его снимать. Полностью вручную его могут снять и правда Гуру. А для остальных - есть много хороших утилит, облегчающих этот труд. Я, например, Армадиллу снимать умею. Кстати, он платный. И если СКИНЕР пиратской версией защитит свою прогу, а потом будет ее продавать... И об этом узнают разработчики армадиллы... Ой! |
Сообщ.
#88
,
|
|
|
http://bbs.vbstreets.ru/viewtopic.php?t=9525
|
Сообщ.
#89
,
|
|
|
Вобщем ужинал тут и придумал, такой, на мой взгляд "извратный" метод защиты.
Прикреплённый файлshareware.zip (11.87 Кбайт, скачиваний: 211) |
Сообщ.
#90
,
|
|
|
защита, защита... Вы бы сначала до ума бы довели, а потом защищали...
зы: из ридми. Цитата Коммерческая сторона: Стоимость исходников $3000, обращаться на lenar2003@mail.ru шутник :-) за такие бабки я лично готов выучить Си,Асм и Делфи :-) |
Сообщ.
#91
,
|
|
|
Цитата Vasya2000 @ М Сторонние продукты обсуждаем тут: VBAdvance... В этой теме обсуждаем только аддин от SCINER! Это конечно хорошо, НО ГДЕ ВЗЯТЬ ЭТОТ АДДИН, в Addins его нет! |
Сообщ.
#92
,
|
|
|
См. пункт 4. vb_dll Создание АПИ dll
|
Сообщ.
#93
,
|
|
|
SCINER, подправь плиз интерфейс аддина. У тебя во время компиляции, когда выбираешь опции - два optionbutton на frame расположены. Ты разве забыл, что XP не поддерживает в стилях на frame optionbutton и checkbox, вместо надписей черные квадраты. Замени frame на picturebox и все будет отлично. Можешь даже картинку в picturebox запихать фоном как frame, чтобы оригинальность интерфейса не нарушать. А так не понять что там выбирать надо. Или объясни что там за опции на верхнем оптионбаттоне и на нижнем.
Сенкс заранее. |
Сообщ.
#94
,
|
|
|
Цитата XPraptor @ SCINER, подправь плиз интерфейс аддина. У тебя во время компиляции, когда выбираешь опции - два optionbutton на frame расположены. Ты разве забыл, что XP не поддерживает в стилях на frame optionbutton и checkbox, вместо надписей черные квадраты. Замени frame на picturebox и все будет отлично. Можешь даже картинку в picturebox запихать фоном как frame, чтобы оригинальность интерфейса не нарушать. А так не понять что там выбирать надо. Или объясни что там за опции на верхнем оптионбаттоне и на нижнем. Сенкс заранее. done. |
Сообщ.
#95
,
|
|
|
Не получается ф-ции dll-ки из MSVC++ 6.0 использовать. Вначале делаю LoadLibrary (msvbvm6.dll...);
LoadLibrary (my.dll...)-нормально,но затем при использовании какой-либо ф-ции из my.dll, любой вызов вылетает с ошибкой доступа к памяти. Видимо стек нарушается при вызове. Не плохо бы добавить примеры вызова из Delphy, C++ и т.д. |
Сообщ.
#96
,
|
|
|
Т.к. никто не отвечает, привожу Вам VB-исходники этого-самого чудо линковщика и AddIn-а, они давно уже существуют в сети, причем автор-чел. из Австралии последняя 2-я версия (2003год): http://www.matersoft.narod.ru/files/VB_DLL.rar и не парьтесь, дорабатывайте сами.
________________________ А вы говорили три тысчи - три тыщи |
Сообщ.
#97
,
|
|
|
Цитата MaterSoft @ Видимо стек нарушается при вызове Видимо просто у тебя нерпавильно объявлены функции Цитата Нами же практически завершен коммерческий пакет без всяких переименований LINK.EXE и т.д. со множеством доп. функций и с использованием некоторых возможностей Intel C++ Compiler 8 Прежде чем продавать свой "продукт", выясните все таки, что во что он там компилирует... |
Сообщ.
#98
,
|
|
|
У нас не "продукт" компилирует. Спасибо за совет.
Прошлый глюк с ошибкой при вызове ф-ций был связан с неправильной уст-кой Addin от SKINER.(Первый раз увидел-загорелось и в попыхах LINK в LINK1 переименовал..) Исходники теперь есть, сами можете "продукты" создавать. |
Сообщ.
#99
,
|
|
|
Как быть с 'чужими' приложениями ? при вызове vb dll'ок жалуются на msvbvm60.dll ((...
|
Сообщ.
#100
,
|
|
|
Цитата MaterSoft @ Т.к. никто не отвечает, привожу Вам VB-исходники этого-самого чудо линковщика и AddIn-а, они давно уже существуют в сети, причем автор-чел. из Австралии последняя 2-я версия (2003год): http://www.matersoft.narod.ru/files/VB_DLL.rar и не парьтесь, дорабатывайте сами. ________________________ А вы говорили три тысчи - три тыщи Содержимое архива: Цитата Халява кончилась. Ведется разработка коммерческого продукта. MatёrSoft. |
Сообщ.
#101
,
|
|
|
TSR, подгружай msvbvm60.dll при помощи LoadLibrary
Цитата SCINER @ Содержимое архива: Ахахахаа отожгли парни |
Сообщ.
#102
,
|
|
|
Цитата Как быть с 'чужими' приложениями ? при вызове vb dll'ок жалуются на msvbvm60.dll Уже иного раз писали, что эти API DLL могут вызываться только из VB, там проблема с инициализацией msvbvm60 |
Сообщ.
#103
,
|
|
|
Цитата TSR, подгружай msvbvm60.dll при помощи LoadLibrary В 'чужой' скомпиленой проге я немогу подгрузить msvbvm60.dll, тут еще советовали в самой VB-DLL подгружать через kernel32 \ LoadLibraryA,,, результата - нет ) Цитата Уже иного раз писали, что эти API DLL могут вызываться только из VB, там проблема с инициализацией msvbvm60 хе, обрати внимание на ошибку которую выдают проги при юзанье vb-dll,,, Быстро вы сдались тема с 2004 года, и так дело до конца не довели. (( Решение проблемы vbadvance, спасибо grigorash за ссылку. Цитата PS Я так и не понял, он может компилить DLL которые можно юзать из других языков ? да - может, библиотека msvbvm60.dll так же используется, но она подгружается без проблем без всяких LoadLibrary. Всем спасибо за хелп. |
Сообщ.
#104
,
|
|
|
Цитата TSR @ В 'чужой' скомпиленой проге я немогу подгрузить msvbvm60.dll Можешь. Это называется инжектированием. |
Сообщ.
#105
,
|
|
|
Из программы на PB пытаюсь запустить функцию из библиотеки.
Но как известно генерируется ошибка. Интересно что выйдет если в библиотеке в процедуре DllMain при DLL_PROCESS_ATTACH считать структуру VBHeader и передать ее функции Call ThunRTMain(VBHeader) |
Сообщ.
#106
,
|
|
|
Цитата Интересно что выйдет если в библиотеке в процедуре DllMain при DLL_PROCESS_ATTACH считать структуру VBHeader и передать ее функции Call ThunRTMain(VBHeader) А каким образом отработает DLL_PROCESS_ATTACH если краш наступает на этапе инициализации VB DLL? msvbvm60 уже должна быть отображена на пространство процесса, делать это нужно из PB EXE файла, т.е. сначала загружаем msvbvm60 а потом уже VB DLL. Но тогда какой смысл во всем этом гемморое? |
Сообщ.
#107
,
|
|
|
SCINER, а пытался кто-нибудь поколдавать над полученной DLL'кой программой Fusion? Не уверен, что она сработает в случае с API DLL (тем паче такой необычной), но чем черт не шутит...
|
Сообщ.
#108
,
|
|
|
Цитата Alex221 @ Цитата Интересно что выйдет если в библиотеке в процедуре DllMain при DLL_PROCESS_ATTACH считать структуру VBHeader и передать ее функции Call ThunRTMain(VBHeader) А каким образом отработает DLL_PROCESS_ATTACH если краш наступает на этапе инициализации VB DLL? msvbvm60 уже должна быть отображена на пространство процесса, делать это нужно из PB EXE файла, т.е. сначала загружаем msvbvm60 а потом уже VB DLL. Но тогда какой смысл во всем этом гемморое? DLL_PROCESS_ATTACH наступает, даже дает кое-что сделать! |
Сообщ.
#109
,
|
|
|
Попробовал пример из архива - скомпилил dll.dll. Запустил Пример.vbp. При вызове функции из dll пишет cannot find entry point..
|
Сообщ.
#110
,
|
|
|
Цитата dismalion @ Попробовал пример из архива - скомпилил dll.dll. Запустил Пример.vbp. При вызове функции из dll пишет cannot find entry point.. приаттачь скомпиленную библиотеку, ее исходники и исходники тестовой проги. |
Сообщ.
#111
,
|
|
|
Исходники из архива vb_dll. В аттаче еще добавил скомпилированную библиотеку
Прикреплённый файлdll.zip (5.18 Кбайт, скачиваний: 233) |
Сообщ.
#112
,
|
|
|
Цитата SCINER @ Так ведь нет никаких глюков! Просто жестко пропиши при компиляции путь к желаемой DLL'ке например так: c:\my_dll.dll и все будет OK! Всем привет! Уважаемый SCINNER, у меня вот проблемка по созданию DLL-ки с помощью твоего ADD-in'a! Выше, ты писал, что при сохранении проекта, в файле самого проекта указывается путь path32 "......................" И что после изменения пути и расширения файла создается [имя файла].exe А у меня после сохранения проекта файл проекта выглядит так: Type=Exe Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\WINDOWS\system32\stdole2.tlb#OLE Automation Reference=*\G{B4FED8FB-2E8D-4D06-A4F2-E999F73EFE6F}#1.0#0#..\..\..\..\..\zwQuery.dll#Project1 Form=frmMain.frm Module=modHook; modHook.bas IconForm="frmMain" Startup="frmMain" ExeName32="HideInProc.exe" Command32="" <--------- ?????? Почему у вас там написано Path32, а у меня Command32 пустой???? Name="HideInProc" HelpContextID="0" CompatibleMode="0" MajorVer=1 MinorVer=0 RevisionVer=0 AutoIncrementVer=0 ServerSupportFiles=0 VersionCompanyName="Home" CompilationType=0 OptimizationType=0 FavorPentiumPro=0 CodeViewDebugInfo=0 NoAliasing=0 BoundsCheck=0 OverflowCheck=0 FlPointCheck=0 FDIVCheck=0 UnroundedFP=0 StartMode=0 Unattended=0 Retained=0 ThreadPerObject=0 MaxNumberOfThreads=1 [MS Transaction Server] AutoRefresh=1 HideInProc.vbd Создается при компиляции!!! Но DLL Нет! Почему у вас там написано Path32, а у меня Command32 пустой???? Мне очень нужно создать DLL ку! Она для перехвата нужна!!!! Вся работа сейчас стопанулась! |
Сообщ.
#113
,
|
|
|
Цитата Nazaroff @ Мне очень нужно создать DLL ку! Она для перехвата нужна!!!! Вся работа сейчас стопанулась! Nazaroff, Sciner тебе ответит, а пока можешь попробовать это как альтернативу для создания DLL на VB6. |
Сообщ.
#114
,
|
|
|
Цитата Nazaroff @ Мне очень нужно создать DLL ку! Она для перехвата нужна!!!! Вся работа сейчас стопанулась! А для хуков совсем не обязательно, чтобы DLL была именно с АПИ, вполне пойдёт и ActiveX.dll и даже ActiveX.ocx Смотри здесь: хук на чистом бейсике |
Сообщ.
#115
,
|
|
|
2 Nazaroff: Не смотри вообще в этот файл проекта.
Для успешной компиляции библиотеки тебе нужно сделать следующее: 1) Выбрать пункт меню File → Компиляция 2) Перейти в диалоге выбора имени файла в нужный каталог и в строке имени файла указать mydll.dll, т.е. принудительно выставить правильное расширение файла. |
Сообщ.
#116
,
|
|
|
Цитата SCINER @ 2 Nazaroff: Не смотри вообще в этот файл проекта. Для успешной компиляции библиотеки тебе нужно сделать следующее: 1) Выбрать пункт меню File → Компиляция 2) Перейти в диалоге выбора имени файла в нужный каталог и в строке имени файла указать mydll.dll, т.е. принудительно выставить правильное расширение файла. SCINER, сделал все, ка ты написал. По-обычному, путь лежит в Template\Projects Смотри, меня к пример "C:\" Имя файла там прописан как "****.EXE" Меняю имя файла,как ты говорил, "****.dll" Но ни файла "****.exe", "****.dll" нет на "C:\" !!!!! Что же делать? -Added Цитата varzind @ Цитата Nazaroff @ Мне очень нужно создать DLL ку! Она для перехвата нужна!!!! Вся работа сейчас стопанулась! Nazaroff, Sciner тебе ответит, а пока можешь попробовать это как альтернативу для создания DLL на VB6. Спасибо тебе))) -Added Цитата Артур @ Цитата Nazaroff @ Мне очень нужно создать DLL ку! Она для перехвата нужна!!!! Вся работа сейчас стопанулась! А для хуков совсем не обязательно, чтобы DLL была именно с АПИ, вполне пойдёт и ActiveX.dll и даже ActiveX.ocx Смотри здесь: хук на чистом бейсике Я просто хочу, чтобы она как Windows'овская была, Чтобы закинул её в любое место на диске и она работала. Отдельно была от проЖекта. Поэтому и заинтересовался работой сей Add-in'a От SCINER'a |
Сообщ.
#117
,
|
|
|
Цитата Смотри, меня к пример "C:\" Имя файла там прописан как "****.EXE" Меняю имя файла,как ты говорил, "****.dll" Я правильно понимаю, это ты проделываешь в диалоге выбора файла при компиляции проекта из меню Файл → Компиляция? Компиляция — это пункт меню, который с иконкой. Его добавляет аддин. Кстати не вылетают ли ошибки при компиляции? Есть ли у тебя в проекте модуль с функциями, который добавляет аддин? Тип проекта Standart Exe ? Прицепи сюда проект, который не получается скомпилить. У меня не возникало никогда проблем с компиляцией, ни на одной версии Windows. Хотя я всегда юзаю сей аддин. |
Сообщ.
#118
,
|
|
|
Цитата Nazaroff @ Я просто хочу, чтобы она как Windows'овская была, Чтобы закинул её в любое место на диске и она работала. Отдельно была от проЖекта. Поэтому и заинтересовался работой сей Add-in'a От SCINER'a Вот в этом топике: http://bbs.vbstreets.ru/viewtopic.php?p=6708344#p6708344 лежит готовый пример хука на основе библиотеки Хакера. Думаю, что на основе библиотеки SCINER принцип хука будет приблизительно такой же. Там правда сам проект общается с длл, а раз тебе этого не надо и вся обработка будет прямо в библиотеке, то ещё проще И посмотри ещё дискуссию в этой теме: http://bbs.vbstreets.ru/viewtopic.php?f=1&t=36237&start=0&st=0&sk=t&sd=a И всё-таки: натив-библиотека и для твоей задачи совсем не обязательна. Единственное отличие - что ActiveX.dll нужно зарегистрировать - и будет она у тебя, точно так же, "отдельно от проЖекта" А совсем уж отдельно от проЖекта вообще не получится - кто-то ведь должен ставить сам хук? Библа - хоть натив, хоть АктивХе - сама этого не сделает. Так что этот кто-то пусть и библу регит. |
Сообщ.
#119
,
|
|
|
Цитата SCINER @ Я правильно понимаю, это ты проделываешь в диалоге выбора файла при компиляции проекта из меню Файл → Компиляция? Компиляция — это пункт меню, который с иконкой. Его добавляет аддин. Кстати не вылетают ли ошибки при компиляции? Есть ли у тебя в проекте модуль с функциями, который добавляет аддин? Тип проекта Standart Exe ? 1)Да, именно в меню Файл---Компиляция(с иконкой) 2)Никаких ошибок нет вообще Посмотри, я прикрепил архив с этим проэктом.Он маленький и простой, но суть в том, что он не компилется в длл Добавлено Артур, спасибо за ссылочки Прикреплённый файлDLL.rar (1.79 Кбайт, скачиваний: 228) |
Сообщ.
#120
,
|
|
|
SCINER, у меня тут кое-что проявилось!
Переустановил VB полностью, установил аддин. Теперь: DLL появляется(Я указывал диск С, имя библиотеки vbApiHook.dll), с ней еще 3 файла появляются при компиляции: 1)compile.txt 2)vbApiHook.lib 3)vbApiHook.exp Далее, хочу зарегить эту Dll при помощи (regsvr32 "C:\vbApiHook.dll") Сервер выдает сообщение, что Dll была загружена, но точку входа найти не удалось. Вот содержание "compile.txt": \link2.exe "C:\modDLL.OBJ" "C:\vbApiHook.OBJ" "C:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:DLLMain /OUT:"C:\vbApiHook.dll" /BASE:0x10000000 /SUBSYSTEM:WINDOWS,4.0 /VERSION:1.0 /INCREMENTAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078 /DLL /DEF:"c:\documents and settings\максим\рабочий стол\coding\working\vbapihook_dll\vbAPIHook_Dll.vbd" У меня вот подозрения есть, почему в файле compile.txt сначала идет \link2.exe Может он не через твой линк компилит??? В чем теперь дело? прикреплю проект компилируемой vbApiHook.dll Добавлено SCINER, 100% это из-за того, что она компилит не через твой "link.exe", а черезстандартный "LINK2.exe" !!! Почему? Я убрал из папки \VB98\LINK2.exe на рабочий стол, попытался снова скомпилить Dll, её вообще не оказалось вместе с теми 3-я файлами!!!!! Только один файл compile.txt ,точно с таким же содержимым, как я выше писал, создается на С:\ и все! А закинул обратно, компилится!!!! Прикреплённый файлvbAPIHook_Dll.rar (1.71 Кбайт, скачиваний: 205) |
Сообщ.
#121
,
|
|
|
Цитата Nazaroff @ Далее, хочу зарегить эту Dll при помощи (regsvr32 "C:\vbApiHook.dll") главное - понимание. |
Сообщ.
#122
,
|
|
|
Цитата Nazaroff @ Далее, хочу зарегить эту Dll при помощи (regsvr32 "C:\vbApiHook.dll") Прежде чем писать API DLL наверное стоит почитиать что это такое и чем оно отличается от COM DLL |
Сообщ.
#123
,
|
|
|
Я понял, Dll работает, я разобрался с этой темой Всем спасибо
|
Сообщ.
#124
,
|
|
|
Не без основания заявляю, что метод Хакера одинаково неработоспособен как и мой =)
Неработоспособность моей заключается в невозможности вызова функций из других языков =( |