Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.044 c
15-1268394964
12
2010-03-12 14:56
2010.08.27
2x join в Access


2-1264931372
duMka
2010-01-31 12:49
2010.08.27
Как получить кусок картинки из чужого приложения?


2-1269519135
Влад
2010-03-25 15:12
2010.08.27
ActiveX


15-1264366744
Nic
2010-01-24 23:59
2010.08.27
Схема Беллмана


2-1274358308
Tifon
2010-05-20 16:25
2010.08.27
Как определить какая кнопка была нажата на клавиатуре.




   Наверх