Команда import
Команда import позволяет подключить импортируемые функции из DLL. После ключевого слова import следует имя DLL-файла, из которого будут импортироваться функции, затем открывается блок с описаниями. В каждой строке блока должно быть описание импортируемой функции - имя типа возвращаемого значения (если есть), затем имя функции и в круглых скобках имена типов параметров через запятую. Можно определить новое имя функции, которое будет использоваться вместо импортируемого имени. Для этого после описания ставиться -> и новое имя функции. После импортирования, вызов DLL функции ничем не отличается от вызова функции написанной на языке Gentee.
import "kernel32.dll"
{
uint CloseHandle( uint )
uint CopyFileA( uint, uint, uint ) -> CopyFile
uint CreateFileA( uint, uint, uint, uint, uint, uint, uint ) -> CreateFile
uint CreateProcessA( uint, uint, uint, uint, uint, uint, uint, uint,
STARTUPINFO, PROCESS_INFORMATION ) -> CreateProcess
}
Если вы будете запускать Gentee программу из собственного EXE файла, то вы можете использовать функции из EXE модуля. Для этого, укажите имя DLL файла в виде пустой строки, а про передачу адресов импортируемых функций читайте в разделе Настройка и запуск Gentee.
Атрибуты
cdeclare
Означает, что импортируются __cdecl функции. По умолчанию считается, что импортируемые функции являются __stdcall функциями.
import "myfile.dll" <cdeclare>
{
...
}
link
В этому случае, dll файл будет включен в .ge, во время запуска запишется во временную директорию и оттуда уже будет загружен программой. По завершению работы он уничтожится. То есть, этот атрибут полезен, если вы не хотите распространять дополнительные dll файлы вместе с .ge, но не уверены, что они будут на машине пользователя. Желательно указывать полный путь к dll файлу.
import $"c:\mypath\myfile.dll" <link>
{
...
}
exe
Используйте этот атрибут если вы знаете только путь DLL относительно вашего приложения. Вот пример, когда my.dll будет подключаться из поддиректории Plugins где запущена программа.
import $"plugins\my.dll" <exe>
{
...
}