Автор | Сообщение |
|
| постоянный участник
|
Пост N: 5987
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.08.18 17:20. Заголовок: C# Dll and MiniGui ...
Всем привет. Хочу сделать свою DLL на C# и вызвать её из МиниГуи. Код будет примерно такой: aParam := { aTTitle, aTTitle2, aTSuperHd, aTHeading, aTFooting, aTTitle3, aTCell, ... } ????CallDLL( "lib32_c#xlsole.DLL" , , "RunExcelOle" , cFile, lActivate, aParam ) If lActivate .And. FILE(cFile) ShellExecute( 0, "Open", cFile,,, 3 ) EndIf Ряд вопросов которые вообще непонятны. 1) Какими функциями MiniGui можно использовать ? нашел только 2 - HMG_CallDLL() и CallDll32() 2) Как передать массивы в DLL ? 3) При выполнении DLL создаётся файл, а это длительная операция. Как сделать задержку для ожидания создания файла и потом только открывать файл в МиниГуи ?
|
|
|
Ответов - 5
[только новые]
|
|
|
| постоянный участник
|
Пост N: 5990
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.08.18 23:56. Заголовок: Чуток разобрался с D..
Чуток разобрался с DLL. Наверное для возвращаемой строки нужно сделать правку для MiniGUI\SOURCE\Dll\_windll.c : case CTYPE_LONG: hb_retnl( ( LONG ) rc.Long ); break; case CTYPE_CHAR_PTR: case CTYPE_UNSIGNED_CHAR_PTR: hb_retc((char*) rc.Pointer); break; case CTYPE_UNSIGNED_CHAR: case CTYPE_UNSIGNED_INT: case CTYPE_INT_PTR: case CTYPE_UNSIGNED_SHORT_PTR: Пример демонстрирующий работу с DLL на С++ сделал. Отправил Григорию. Массивы передать из МиниГуи в С++ сделать не смог. Да вроде и не обязательно пока.
|
|
|
|
| Администратор
|
Пост N: 3788
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.08.18 19:02. Заголовок: Andrey пишет: Навер..
Andrey пишет: цитата: | Наверное для возвращаемой строки нужно сделать правку для MiniGUI\SOURCE\Dll\_windll.c : |
| Вместо правок этих модулей может лучше использовать стандартные функции харбора hb_libload, hb_dyncall ? А то опять изобретание велосипеда получается. А насчет передачи массивов - так в разных языках программирования они имеют различную реализацию, так что такая задача становится в общем случае невозможной. Передавать в качестве параметров можно одинарные типы вроде строк, целых, double и тому подобным.
|
|
|
|
| постоянный участник
|
Пост N: 5993
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.08.18 21:09. Заголовок: Pasha пишет: Вместо..
Pasha пишет: цитата: | Вместо правок этих модулей может лучше использовать стандартные функции харбора hb_libload, hb_dyncall |
| Спасибо ! Нашёл эти функции. Попробую сделать с ними.
|
|
|
|
| постоянный участник
|
Пост N: 5994
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.08.18 08:57. Заголовок: Сделал пример для DL..
Сделал пример для DLL на C++ На MSVC dll-ка нормально собирается и работает. А на BCC dll-ка собирается, но не работает !!! Как то криво собирает BCC. Может я неправильно ключи сборки ставлю ? Вот батник для MSVC (test_dll.exe это тестировочная программа для Lib32_CPP_demo.cpp) - Скрытый текст
@echo off rem call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86 mkdir OBJ cd OBJ cl.exe /MT ..\Lib32_CPP_demo.cpp /link /DLL /OUT:Lib32_CPP_demo.dll cl.exe /MT ..\test_dll.cpp move Lib32_CPP_demo.dll .. move test_dll.exe .. cd.. echo =========================================================================== echo Testing the Library - Lib32_CPP_demo.dll echo =========================================================================== start test_dll.exe
| Вот батник для BCC - Скрытый текст
if not defined MG_BCC set MG_BCC=c:\borland\bcc55 if not defined MV_CSWITCH set MV_CSWITCH=-w -w-par -w-inl if exist build.log del build.log > nul : echo %MG_BCC% >>build.log rem call compile Lib32_CPP_demo.c %MG_BCC%\BIN\bcc32.EXE -c -tW -d -6 -O2 -OS -Ov -Oi -Oc -I%MG_BCC%\include -L%MG_BCC%\lib %MV_CSWITCH% Lib32_CPP_demo.cpp >>build.log if errorlevel 1 goto err rem Link for create dll %MG_BCC%\BIN\ilink32.EXE -Tpd -x -I%MG_BCC%\include -L%MG_BCC%\lib -L%MG_BCC%\lib\PSDK Lib32_CPP_demo.obj,Lib32_CPP_demo.dll,,import32.lib+cw32.lib+user32.lib,, >>build.log if errorlevel 1 goto err goto end :err echo ===== Error ! View file build.log ======= pause :end
| Кто знает, подскажите пожалуйста !
|
|
|
|
| постоянный участник
|
Пост N: 5995
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.08.18 23:14. Заголовок: Всем привет ! Столкн..
Всем привет ! Столкнулся с обратной задачей и не получается сделать её. Делаю отдельную DLL на MiniGui и потом хочу вызывать функции из этой DLL в основной программе на МиниГуи. Хочу потом свой проект поделить на отдельные dll-ки. Собрал тестовый проект - не пашет. Выдает такую ошибку: Сам проект здесь - https://cloud.mail.ru/public/4X4S/v4CZmKyru Подскажите пожалуйста - что не так делаю ?
|
|
|
|