Предложения по использованию Delphi для создания мультиплексных файлов DLL
Попробуйте использовать стандартные интерфейсы DLL. Это означает, что тип передачи параметров и возврата функции не может быть уникальным для Delphi, такой как String (ANSISTRING), а также динамические массивы и композитные типы (такие как записи), содержащие эти типы элементов, и не могут содержать данные о членах данных эти типы членов. Если вы используете тип строки или тип динамического массива, а вызывающий абонент не является программой Delphi, вы в основном сообщите об ошибке. Ошибка также может возникнуть, если вызывающим абонент является Delphi, но вызывающий абонент или Callee не в первой, содержащей единицу файла проекта, который не является Sharemem.
Если вызывающий абонент является приложением Delphi, вы можете использовать объекты, которые не содержат элементов данных запрещенного типа (строка, динамический массив) в качестве параметров или возвращающих значений, но также следует избегать как можно больше.
Если вызывающий абонент и вызываемая сторона являются программами Delphi, и им необходимо использовать строковые или динамические массивы в качестве параметров, первая единица включения файла проекта между двумя сторонами должна быть Sharemem. (Программа C ++ Builder может быть такой же, но она не была проверена.)
Если вызывающий не является программой Delphi, строка, динамический массив, типы составных данных и экземпляры класса, содержащие строки или динамические массивы, не могут использоваться в качестве параметров или возвратных значений.
Следовательно, чтобы улучшить диапазон мультиплексирования DLL и избежать возможных ошибок, следует использовать стандартный тип параметров API WIN32. Динамические массивы преобразуются в тип указателя (@array [0]) и добавляют длину массива.
Если вызывающий абонент и называемая партия являются программами Delphi и не хотят выполнять вышеуказанное преобразование для удобства письма, рекомендуется использовать форму пакета времени выполнения. Пакеты времени выполнения могут обеспечить правильное выброс динамически выделенных данных. Таким образом, из -за его расширения (.bpl) он показывает, что файл ограничен строителем Delphi/C ++ (в отличие от DLL).
Во -вторых, старайтесь не использовать функции/процессы перегрузки как можно больше. и методы в Delphi, такие как CreateByDefaultfile и CreateFault.
Наконец, как поставщик DLLS, вы должны предоставить файлы интерфейса прямого программирования, такие как .pas или .dcu в Delphi (предпочтительно .pas, как могут быть комментарии), .h и .lib в C и C ++. Вместо того, чтобы позволить пользователям создавать его сами. Это особенно важно, если вам нужно иметь функцию/процесс перегрузки. Кроме того, в качестве приложения Delphi предоставляемый файл .PAS может быть подключен заранее (используя внешнюю, чтобы указать выходную функцию в DLL) или позже (с использованием LoadLibrary и GetProcadDress). показывает, что это формальное (или Hiqos) и гарантированно.