Форум » GUI » C# Dll and MiniGui ... » Ответить

C# Dll and MiniGui ...

Andrey: Всем привет. Хочу сделать свою DLL на C# и вызвать её из МиниГуи. Код будет примерно такой: [pre2] 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[/pre2] Ряд вопросов которые вообще непонятны. 1) Какими функциями MiniGui можно использовать ? нашел только 2 - HMG_CallDLL() и CallDll32() 2) Как передать массивы в DLL ? 3) При выполнении DLL создаётся файл, а это длительная операция. Как сделать задержку для ожидания создания файла и потом только открывать файл в МиниГуи ?

Ответов - 5

Andrey: Чуток разобрался с DLL. Наверное для возвращаемой строки нужно сделать правку для MiniGUI\SOURCE\Dll\_windll.c : [pre2] 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:[/pre2] Пример демонстрирующий работу с DLL на С++ сделал. Отправил Григорию. Массивы передать из МиниГуи в С++ сделать не смог. Да вроде и не обязательно пока.

Pasha: Andrey пишет: Наверное для возвращаемой строки нужно сделать правку для MiniGUI\SOURCE\Dll\_windll.c : Вместо правок этих модулей может лучше использовать стандартные функции харбора hb_libload, hb_dyncall ? А то опять изобретание велосипеда получается. А насчет передачи массивов - так в разных языках программирования они имеют различную реализацию, так что такая задача становится в общем случае невозможной. Передавать в качестве параметров можно одинарные типы вроде строк, целых, double и тому подобным.

Andrey: Pasha пишет: Вместо правок этих модулей может лучше использовать стандартные функции харбора hb_libload, hb_dyncall Спасибо ! Нашёл эти функции. Попробую сделать с ними.


Andrey: Сделал пример для DLL на C++ На MSVC dll-ка нормально собирается и работает. А на BCC dll-ка собирается, но не работает !!! Как то криво собирает BCC. Может я неправильно ключи сборки ставлю ? Вот батник для MSVC (test_dll.exe это тестировочная программа для Lib32_CPP_demo.cpp) - [pre2]@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 [/pre2] Вот батник для BCC - [pre2]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 [/pre2] Кто знает, подскажите пожалуйста !

Andrey: Всем привет ! Столкнулся с обратной задачей и не получается сделать её. Делаю отдельную DLL на MiniGui и потом хочу вызывать функции из этой DLL в основной программе на МиниГуи. Хочу потом свой проект поделить на отдельные dll-ки. Собрал тестовый проект - не пашет. Выдает такую ошибку: Сам проект здесь - https://cloud.mail.ru/public/4X4S/v4CZmKyru Подскажите пожалуйста - что не так делаю ?



полная версия страницы