Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Библиотеки на С++ для Дельфи. [D6, XP]


Страницы:   1 2 3

Drowsy ©   (2009-02-05 01:25:00) 

Можно на С++ создать библиотеку, которую можно будет в Дельфи использовать?


tesseract   (2009-02-05 10:30:00) [41]


> .... вроде всё же можно:


Конечно можно, хоть для Delphi хоть для VB. Только надо понимать как переменные в памяти храняться.


Drowsy   (2009-02-05 09:51:00) [42]

.... вроде всё же можно:
http://www.imho.ws/showthread.php?t=123792


Anatoly Podgoretsky   (2009-02-05 09:15:00) [43]

> Amoeba  (05.02.2009 3:40:04)  [4]

> но есть смутное подозрение, что он имеет в виду как раз то, что невозможно (т.е.  не DLL, а сишная LIB).

А какая разница, если для Дельфи, а не для системы.


Anatoly Podgoretsky   (2009-02-05 09:14:00) [44]

> Германн  (05.02.2009 1:57:02)  [2]

Нельзя, классовая модель, менеджер памяти разные.


Drowsy   (2009-02-05 05:20:00) [45]

Нет, функции DLL ничего не будут экспортировать, кроме кода ошибки, если она произойдет.
Я в одной статье нашёл пример:

"""
Приведем исходный код динамически подключаемой библиотеки, которая называется MyDLL и содержит одну функцию MyFunction, которая просто выводит сообщение.

Сначала в заголовочном файле определяется макроконтстанта EXPORT. Использование этого ключевого слова при определении некоторой функции динамически подключаемой библиотеке позволяет сообщить компоновщику, что эта функция доступна для использования другими программами, в результате чего он заносит ее в библиотеку импорта. Кроме этого, такая функция, точно так же, как и оконная процедура, должна определяться с помощью константы CALLBACK:

MyDLL.h
   #define EXPORT extern "C" __declspec (dllexport)
   EXPORT int CALLBACK MyFunction(char *str);

Файл библиотеки также несколько отличается от обычных файлов на языке C для Windows. В нем вместо функции WinMain имеется функция DllMain. Эта функция используется для выполнения инициализации, о чем будет рассказано позже. Для того, чтобы библиотека осталась после ее загрузки в памяти, и можно было вызывать ее функции, необходимо, чтобы ее возвращаемым значением было TRUE:

MyDLL.c
   #include <windows.h>
   #include "MyDLL.h"

   int WINAPI DllMain(HINSTANCE hInstance, DWORD fdReason, PVOID pvReserved)
   {
       return TRUE;
   }
   EXPORT int CALLBACK MyFunction(char *str)
   {
       MessageBox(NULL,str,"Function from DLL",MB_OK);
       return 1;
   }

После трансляции и компоновки этих файлов появляется два файла - MyDLL.dll (сама динамически подключаемая библиотека) и MyDLL.lib (ее библиотека импорта).

"""

Попробовал его скомпилировать в C++ Builder-e.
Выкидывает ошибку :
[C++ Error] DDDLLL.cpp(34): E2141 Declaration syntax error

EXPORT int CALLBACK MyFunction !!вот здесь!! (char *str)


Amoeba   (2009-02-05 04:38:00) [46]

Можно, но только если под библиотекой понимается DLL. Хотя и здесь не все так однозначно (DLL не должна экспортировать или использовать в параметрах ф-ий классы C++)


Drowsy   (2009-02-05 03:57:00) [47]

Нашёл в инете очень полезные функции, но реализованные на С++ очень хитро. Я их загнал в C++Builder и протестировал. Есть желание понять, можно ли организовать библиотеку (или как-нибудь иначе организовать "интерфейс"), чтобы юзать эти функии в своей программе на Дельфи.


Amoeba   (2009-02-05 03:40:00) [48]


> Германн ©   (05.02.09 01:57) [2]
>
> Можно. Если есть понимание.
> И даже не очень сложно.

Не факт. Истина, как известно,  конкретна. Смотря чего хочет автор вопроса, но есть смутное подозрение, что он имеет в виду как раз то, что невозможно (т.е.  не DLL, а сишная LIB). Это и подразумевалось в моем ответе.

> Если есть ссылка на толковую статью или примеры как это
> делается, буду благодарен.
>

Что конкретно-то  нужно? Все зависит от этого. Если одно - то действительно можно (проще или сложнее), если что-то другое - то на самом деле нельзя.


Drowsy   (2009-02-05 02:58:00) [49]

Если есть ссылка на толковую статью или примеры как это делается, буду благодарен.


Германн   (2009-02-05 01:57:00) [50]

Можно. Если есть понимание.
И даже не очень сложно.


Amoeba   (2009-02-05 01:51:00) [51]

Если популярно, то НЕЛЬЗЯ!


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо