Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.05.2011, 22:18
Demonuka Demonuka вне форума
Новичок
 
Регистрация: 10.05.2011
Адрес: г. Смоленск
Сообщения: 55
Версия Delphi: 7
Репутация: 10
Вопрос Перевод .h в .pas

Подключаю си-шную dll к Delphi прложению. Естесственно делаю из .h файла .pas файл. Возникла проблема с этим:
Код:
#ifdef _DLLCOMPILE
 #define _DECLFUNC __declspec(dllexport)
#else
 #define _DECLFUNC __declspec(dllimport)
#endif
Си практически не знаю, если кто в курсе какой в Delphi есть аналог, подскажите пожалуйста...
Ответить с цитированием
  #2  
Старый 10.05.2011, 22:39
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Вы переписываете dll с Си на Делфи? или все-таки подключаете? Если подключаете - на кой вам тогда файлы-заголовки? Подключайте dll как всегда в делфи подключается - статически или динамически и всё.
Ответить с цитированием
  #3  
Старый 10.05.2011, 22:45
Demonuka Demonuka вне форума
Новичок
 
Регистрация: 10.05.2011
Адрес: г. Смоленск
Сообщения: 55
Версия Delphi: 7
Репутация: 10
Печаль

Там достаточно сложные WIN API конструкции...Ни статически ни динамически библиотеку не подключить...только через заголовочный файл, чтоб объяснить Delphi С-шные прибабахи...((
Ответить с цитированием
  #4  
Старый 10.05.2011, 22:55
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Длл - набор функций, написанный в машинном коде. ДЛЛ не может знать о том, на си она или на делфе была сделана. Любая ДЛЛ имеет экспортируемые функции. Их и надо использовать. Хедеры тут вообще ни при чем.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 11.05.2011, 08:17
Demonuka Demonuka вне форума
Новичок
 
Регистрация: 10.05.2011
Адрес: г. Смоленск
Сообщения: 55
Версия Delphi: 7
Репутация: 10
Сообщение

Извиняюсь, я криво выразился...саму dll я подключил....а для использования как раз таки нужно .h файл перевести в .pas. Я собственно все перевел, кроме этого:
Код:
#ifdef _DLLCOMPILE
 #define _DECLFUNC __declspec(dllexport)
#else
 #define _DECLFUNC __declspec(dllimport)
#endif
Ответить с цитированием
  #6  
Старый 11.05.2011, 09:18
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

все правильно - для импорта функций из библиотеки заголовочный файл .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  
Старый 11.05.2011, 09:25
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от Demonuka
Там достаточно сложные WIN API конструкции...Ни статически ни динамически библиотеку не подключить...
Можно пример этих WinAPI конструкций (или весь header целиком)?
Ответить с цитированием
  #8  
Старый 11.05.2011, 09:58
Demonuka Demonuka вне форума
Новичок
 
Регистрация: 10.05.2011
Адрес: г. Смоленск
Сообщения: 55
Версия Delphi: 7
Репутация: 10
Печаль

ryderx34, если это поможет, то вот .h файл и то, как я его перевел(с небольшими комментариями)

NumLock, Описания функций было бы достаточно, если бы в них не фигурировал _DECLFUNC. Что с ним делать я не знаю...честно говоря я даже не до конца понимаю что это и с чем его едят...я Си не знаю...
Вложения
Тип файла: zip Moduls.zip (3.9 Кбайт, 25 просмотров)
Ответить с цитированием
  #9  
Старый 11.05.2011, 14:55
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
Сообщение от Demonuka
, если это поможет, то вот .h файл и то, как я его перевел(с небольшими комментариями)

Описания функций было бы достаточно, если бы в них не фигурировал _DECLFUNC. Что с ним делать я не знаю...честно говоря я даже не до конца понимаю что это и с чем его едят...я Си не знаю...

Значит так.
во первых
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;
и в разделе implementation
Код:
function vfconn_Cmd;external 'conf.dll';
Ответить с цитированием
  #10  
Старый 11.05.2011, 15:06
Demonuka Demonuka вне форума
Новичок
 
Регистрация: 10.05.2011
Адрес: г. Смоленск
Сообщения: 55
Версия Delphi: 7
Репутация: 10
Радость

icWasya Спасибо большое!
Ответить с цитированием
  #11  
Старый 11.05.2011, 15:15
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну, ну, ну...
Код:
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  
Старый 12.05.2011, 09:42
Demonuka Demonuka вне форума
Новичок
 
Регистрация: 10.05.2011
Адрес: г. Смоленск
Сообщения: 55
Версия Delphi: 7
Репутация: 10
Радость Всем большое спасибо! :)

Если кому интересно (ну мало ли пригодится кому), выкладываю окончательный правильный вариант .pas файла.
Вложения
Тип файла: rar COMPORT.rar (1.9 Кбайт, 38 просмотров)
Ответить с цитированием
  #13  
Старый 12.05.2011, 10:09
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

не понимаю зачем нужен раздел implementation в данном случае? ведь ничего не реализуется, а только описывается. достаточно только раздела interface. тем более смысл описывать константы в implementation? а это uses Unit1; вообще...
а с cdecl согласен, это ж не winapi что-то меня сбило с толку
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #14  
Старый 12.05.2011, 10:28
Demonuka Demonuka вне форума
Новичок
 
Регистрация: 10.05.2011
Адрес: г. Смоленск
Сообщения: 55
Версия Delphi: 7
Репутация: 10
По умолчанию

Если не описать это в implementation, то не работает. Uses1 это у меня в проге еще один юнит (прикрепленный юнит не полный...там только то, что относится к .h файлу) - не обращай на него внимания. А где описывать константы не суть важно...
Ответить с цитированием
  #15  
Старый 12.05.2011, 10:48
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
interface
...
  function vfconn_new (strDev:Pchar):VFCONNt_hdr;cdecl; external 'vfconn.dll';
...
implementation

end.

про константы: если константа описана в разделе implementation, то она будет видна только в этом модуле, если в interface, то при uses в других тоже. вот и объясните зачем их описывать в implementation, если никакой реализации в этом модуле нет.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:42.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025