![]() |
|
|
#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'; |