![]() |
|
#1
|
|||
|
|||
![]() Подключаю си-шную dll к Delphi прложению. Естесственно делаю из .h файла .pas файл. Возникла проблема с этим:
Код:
#ifdef _DLLCOMPILE #define _DECLFUNC __declspec(dllexport) #else #define _DECLFUNC __declspec(dllimport) #endif |
#2
|
|||
|
|||
![]() Вы переписываете dll с Си на Делфи? или все-таки подключаете? Если подключаете - на кой вам тогда файлы-заголовки? Подключайте dll как всегда в делфи подключается - статически или динамически и всё.
|
#3
|
|||
|
|||
![]() Там достаточно сложные WIN API конструкции...Ни статически ни динамически библиотеку не подключить...только через заголовочный файл, чтоб объяснить Delphi С-шные прибабахи...((
|
#4
|
||||
|
||||
![]() Длл - набор функций, написанный в машинном коде. ДЛЛ не может знать о том, на си она или на делфе была сделана. Любая ДЛЛ имеет экспортируемые функции. Их и надо использовать. Хедеры тут вообще ни при чем.
jmp $ ; Happy End! The Cake Is A Lie. |
#5
|
|||
|
|||
![]() Извиняюсь, я криво выразился...саму dll я подключил....а для использования как раз таки нужно .h файл перевести в .pas. Я собственно все перевел, кроме этого:
Код:
#ifdef _DLLCOMPILE #define _DECLFUNC __declspec(dllexport) #else #define _DECLFUNC __declspec(dllimport) #endif |
#6
|
||||
|
||||
![]() все правильно - для импорта функций из библиотеки заголовочный файл .h необходим. иначе откуда возьмете это:
CreateWindow HWND WINAPI CreateWindow( __in_opt LPCTSTR lpClassName, __in_opt LPCTSTR lpWindowName, __in DWORD dwStyle, __in int x, __in int y, __in int nWidth, __in int nHeight, __in_opt HWND hWndParent, __in_opt HMENU hMenu, __in_opt HINSTANCE hInstance, __in_opt LPVOID lpParam ); (параметры)? правильно, из Header Winuser.h Demonuka, скорее всего тебе будет необходимо и достаточно только описание функций переписать на pas. ну типы, константы там... Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 11.05.2011 в 09:20. |
#7
|
||||
|
||||
![]() Цитата:
|
#8
|
|||
|
|||
![]() ryderx34, если это поможет, то вот .h файл и то, как я его перевел(с небольшими комментариями)
NumLock, Описания функций было бы достаточно, если бы в них не фигурировал _DECLFUNC. Что с ним делать я не знаю...честно говоря я даже не до конца понимаю что это и с чем его едят...я Си не знаю... |
#9
|
|||
|
|||
![]() Цитата:
Значит так. во первых WINAPI - это stdcall; то есть Код:
type VFCONNt_CallBack=function(msg:Cardinal; wp:wParam; lp:lParam):Integer;stdcall; вместо _DECLFUNC в Delphi нужно писать так: допустим Ваша DLL называется conf.dll, Тогда вместо Код:
_DECLFUNC int vfconn_Cmd(VFCONNt_hdr hdr, WPARAM wParam, void * pV); в разделе interface пишете Код:
function vfconn_Cmd (hdr:VFCONNt_hdr; wParam:WPARAM; pV:pointer):longint;cdecl; Код:
function vfconn_Cmd;external 'conf.dll'; |
#10
|
|||
|
|||
![]() icWasya Спасибо большое!
![]() |
#11
|
||||
|
||||
![]() ну, ну, ну...
Код:
unit ****; interface uses Windows... type VFCONNt_hdr = Pointer; function vfconn_Cmd(hdr: VFCONNt_hdr; wParam: WPARAM; pV: Pointer): Integer; stdcall; external 'conff.dll'; implementation end. Пишу программы за еду. __________________ |
#12
|
|||
|
|||
![]() Если кому интересно (ну мало ли пригодится кому), выкладываю окончательный правильный вариант .pas файла.
|
#13
|
||||
|
||||
![]() не понимаю зачем нужен раздел implementation в данном случае? ведь ничего не реализуется, а только описывается. достаточно только раздела interface. тем более смысл описывать константы в implementation? а это uses Unit1; вообще...
а с cdecl согласен, это ж не winapi что-то меня сбило с толку ![]() Пишу программы за еду. __________________ |
#14
|
|||
|
|||
![]() Если не описать это в implementation, то не работает. Uses1 это у меня в проге еще один юнит (прикрепленный юнит не полный...там только то, что относится к .h файлу) - не обращай на него внимания. А где описывать константы не суть важно...
|
#15
|
||||
|
||||
![]() Код:
interface ... function vfconn_new (strDev:Pchar):VFCONNt_hdr;cdecl; external 'vfconn.dll'; ... implementation end. про константы: если константа описана в разделе implementation, то она будет видна только в этом модуле, если в interface, то при uses в других тоже. вот и объясните зачем их описывать в implementation, если никакой реализации в этом модуле нет. Пишу программы за еду. __________________ |