![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Библиотеки на С++ для Дельфи. [D6, XP]
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]Если популярно, то НЕЛЬЗЯ!