Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизDLL средствами MSVC Express 2008 Найти похожие ветки
← →
pasha_golub © (2010-03-31 15:00) [0]Вообщем, собрал библиотеку. Экспортировал фукнции. Пытаюсь подключить по имени - ничего не получается. Раздеребанил внутренности с помощью TDUMP, и вижу нечто такое:
Sorted by Name:
RVA Ord. Hint Name
-------- ---- ---- ----
000015B0 1 0000 ?AddEdge@@YAPAPAVEdgeElement@ogdf@@PAVGraph@2@PAPAVNodeElement@2@1@Z
00001540 2 0001 ?AddNode@@YAPAPAVNodeElement@ogdf@@PAVGraph@2@PAVGraphAttributes@2@NNNN@Z
00001460 3 0002 ?CreateGraph@@YAPAVGraph@ogdf@@XZ
000014D0 4 0003 ?CreateGraphAtributes@@YAPAVGraphAttributes@ogdf@@PAVGraph@2@@Z
000015F0 5 0004 ?DoFMMLayout@@YA_NPAVGraphAttributes@ogdf@@@Z
000016B0 6 0005 ?DoOptimalHierarchyLayout@@YA_NPAVGraphAttributes@ogdf@@@Z
00001960 7 0006 ?GetNodeRect@@YA_NPAVGraphAttributes@ogdf@@PAPAVNodeElement@2@PAN222@Z
Это в настройках где-то побеждается? Или это Unicode? Или лучше по старинке mingw использовать?
← →
MBo © (2010-03-31 15:16) [1]это name mangling
Для того, чтобы это убрать, объявлять экспортируемые функции с модификатором extern "C" (я не знаю, всегда ли это возможно)
← →
Игорь Шевченко © (2010-03-31 15:17) [2]declspec(dllexport) и extern "C" использовал ?
← →
Dimka Maslov © (2010-03-31 15:21) [3]Можно просто прописать экпортируемые функции в def файле.
← →
pasha_golub © (2010-03-31 16:35) [4]Я не помню какие модификаторы использованы. Сорсы дома. Обязательно уточню.
> Dimka Maslov © (31.03.10 15:21) [3]
>
> Можно просто прописать экпортируемые функции в def файле.
>
Я планирую использовать из Delphi данную библиотеку.
← →
pasha_golub © (2010-04-01 15:31) [5]Вот такая вот петрушка:
// Приведенный ниже блок ifdef - это стандартный метод создания макросов, упрощающий процедуру
// экспорта из библиотек DLL. Все файлы данной DLL скомпилированы с использованием символа MDDGRAPH_EXPORTS,
// заданного в командной строке. Данный символ не должен быть определен ни в одном проекте,
// использующем данную DLL. Благодаря этому любой другой проект, чьи исходные файлы включают данный файл, видит
// функции MDDGRAPH_API как импортированные из DLL, тогда как данная DLL видит символы,
// определяемые данным макросом, как экспортированные.
#ifdef MDDGRAPH_EXPORTS
#define MDDGRAPH_API __declspec(dllexport)
#else
#define MDDGRAPH_API __declspec(dllimport)
#endif
Ну а объявление функции где-то так:MDDGRAPH_API ogdf::Graph* CreateGraph();
← →
Dimka Maslov © (2010-04-02 17:40) [6]
> Я планирую использовать из Delphi данную библиотеку.
Тогда это тоже сработает. Во всех своих сишных библиотеках делаю так и всё прекрасно работает. А вот всякого рода деклспецы и экстерн-Ц как раз и вызывают траблы.
← →
Dimka Maslov © (2010-04-02 17:43) [7]Прошу прощения. Траблы вызываются деклспецами, а экстерн-Ц нужен обязательно если экспортируемые функции перечисляются в def-файле.
← →
Игорь Шевченко © (2010-04-02 19:48) [8]pasha_golub © (01.04.10 15:31) [5]
> Ну а объявление функции где-то так:
> MDDGRAPH_API ogdf::Graph* CreateGraph();
Ну вот это имя и ищи по GetProcAddress:
?CreateGraph@@YAPAVGraph@ogdf@@XZ
или укажи extern "C" MDDGRAPH_API ogdf::Graph* CreateGraph();
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.056 c