On-line: PSP, Haz, гостей 1. Всего: 3 [подробнее..]
АвторСообщение



Пост N: 21
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 04.10.07 08:32. Заголовок: Дайте скрипт для создания своей DLL, pls.


Дайте скрипт для создания своей DLL, pls.

MyDll.prg -> MyDll.dll

Применительно к структуре и файлам дистрибутива MiniGUI.

Те примеры, которые нашел поиском на форуме, не работают.

И связанный вопрос.

Как из готового exe-шника обращиться к функциям dll,
если имя DLL и имя функции неизвестно на этапе компиляции exe-шника,
а имя dll и имя функции становится известным в процессе выполнения exe-шника?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 6 [только новые]


постоянный участник


Пост N: 264
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.10.07 11:56. Заголовок: Re:


Относительно скрипта для создания DLL "применительно к структуре и файлам дистрибутива MiniGUI"
ничего не скажу, не знаю о чем речь.


 цитата:
Как из готового exe-шника обращиться к функциям dll,
если имя DLL и имя функции неизвестно на этапе компиляции exe-шника,
а имя dll и имя функции становится известным в процессе выполнения exe-шника?



PROCEDURE main
LOCAL result

result := ExecuteFuncFromLib( "mydll", "myfunc", 12, "string" )


FUNCTION ExecuteFuncFromLib( cDllName, cFuncName, ... )
LOCAL lib, result := NIL

lib = Hb_libLoad( cDllName )
IF ! Hb_IsNil( lib )
result := HB_libDo( cFuncName, ... )
Hb_LibFree( lib )
ENDIF

RETURN result

Но это не совсем безопасный и не самый быстрый путь,
Пржемек предлагает использовать такую схему

BTW using:
DYNAMIC OtherFuncInPCodeDll

and then:
OtherFuncInPCodeDll( nParam )

is much faster then HB_LilbDo() which search for function symbol on each
call. In Harbour you can also make:
sym := &("@OtherFuncInPCodeDll()")
and then:
sym:exec( nParam )

Еще один совет от Пржемека

If you want to create automatically list of functions declared as DYNAMIC
you can use in your PCODE DLLs then please add to your main code:

proc genFuncList()
local aFunc, hFile
aFunc := getFuncList()
asort( aFunc )
hFile := fcreate("dynamic.ch")
aeval( aFunc, {|x| fwrite( hFile, "DYNAMIC " + x + hb_osNewLine() ) } )
fclose( hFile )
return
func getFuncList()
local aFunc, nCount := __dynsCount(), nDst:=0, n
aFunc := array( nCount )
for n := 1 to nCount
if __dynsIsFun( n )
aFunc[ ++nDst ] := __dynsGetName( n )
endif
next
asize( aFunc, nDst )
return aFunc

and then simply call
genFuncList()
it will create dynamic.ch file with all available functions. Then
simply add:
#include "dynamic.ch"
to your .prg code which should be linked into dynamic DLL. And do not
create any stub functions.




Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 22
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 05.10.07 00:44. Заголовок: Re:


Петр пишет:

 цитата:
Относительно скрипта для создания DLL "применительно к структуре и файлам дистрибутива MiniGUI"
ничего не скажу, не знаю о чем речь.


После установки MiniGUI,
например "Harbour MiniGUI 1.4 Extended Edition (Build 42) - 2007.08.29",
Создается структура папок C:/MiniGUI/... и соответствующий набор файлов в них.

Дело в том, что в найденных мною примерах скриптов для создания DLL, участвуют файлы,
которых нет в моих дистрибутивах MiniGUI. Например - harbour.lib

А в пакете xMate, в котором есть режим создания dll и настройка окружения "MiniGUI",
строка настройки на создание ddl - пустая.
И поэтому, наверное, он ругается и ничего не делает.



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 594
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.10.07 11:54. Заголовок: Re:


1-й файл - батник

@echo off

if not exist obj\dll\mydll md obj\dll\mydll
if not exist lib\b32 md lib\b32

:BUILD

make -fmydll.bc %1 %2 %3 > dll_b32.log
if errorlevel 1 goto BUILD_ERR
if "%1" == "clean" goto CLEAN
if "%1" == "CLEAN" goto CLEAN

:BUILD_OK

if exist hdll.tmp del hdll.tmp
if exist lib\b32\mydll.dll implib -f lib\b32\mydll.lib lib\b32\mydll.dll > nul
if exist lib\b32\mydll.dll copy lib\b32\mydll.dll lib > nul
if exist lib\b32\mydll.lib copy lib\b32\mydll.lib lib > nul

goto EXIT

:BUILD_ERR

notepad dll_b32.log
goto EXIT

:CLEAN
if exist dll_b32.log del dll_b32.log

:EXIT


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 595
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.10.07 11:56. Заголовок: Re:


2-й файл mydll.bc отправить не удается, форум ругается: Ник должен содержать как минимум итд

По-видимому, форум интерпретирует какие-то спецсимволы как свою команду, и не может ее выполнить
Дай почту, отправлю

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 23
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 07.10.07 07:07. Заголовок: sadstar@mail.ru


sadstar@mail.ru

Биг сэнкс

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 19.04.10
ссылка на сообщение  Отправлено: 19.04.10 06:39. Заголовок: Получилось?


Здравствуйте, скажите у вас получилось
создать вот такую штуку
MyDll.prg -> MyDll.dll ..
Если да не могли бы вы ответить как вы это делаете?

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 327
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет