Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.106 c
2-1266564186
oleg1963lora
2010-02-19 10:23
2010.08.27
Как маскировать исключение EDatabaseError?


2-1270185305
Ренат
2010-04-02 09:15
2010.08.27
RichEdit и SelAttributes.Color


2-1269192497
Мевилл
2010-03-21 20:28
2010.08.27
Индексы в delphi 2009


15-1272517480
Анна
2010-04-29 09:04
2010.08.27
Запрос, MSSQL2000


15-1269457611
Petr V. Abramov
2010-03-24 22:06
2010.08.27
Белка и Стрелка 3D