Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с Импортом класса/функций из DLL

92
23 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
Привет всем, вот у меня проблемка возникла:
у меня есть DLL написанная в MS VC++ 6, и вот что там внутри (libgdi.cpp):
Код:
#include "stdafx.h"
#include "libgdi_2.h"

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}

LIBGDI_2_API int nLibgdi_2=0;

CChart::CChart() {
    CChart::count = 0;
    return;
}

int CChart::getCount() {
    return CChart::count;
}


и вот h-файл:
Код:
#ifdef LIBGDI_2_EXPORTS
#define LIBGDI_2_API __declspec(dllexport)
#else
#define LIBGDI_2_API __declspec(dllimport)
#endif

class LIBGDI_2_API CChart {
private:
    int count;
public:
    CChart(void);
    int getCount();
};

extern LIBGDI_2_API int nLibgdi_2;


Дамп сделанный с помощью tdump.exe показывает что у меня экспортится класс. переменная, и члены класса....

Проблема: у меня не получается симпортить КЛАСС из этой ДЛЛ в Билдере....
пишу так

 
Код:
#include "libgdi_2.h";
...
class LIBGDI_2_API CChart;

function Test() {
  CChart c; // или вот так тоже пишу CChart * c = new CChart(); ... ровно
}


говорит что Unresolved External CChart::CChart(void).....

вот что делать даже не представляю.... ну понятно что не может зацепить DLL ну..... а как быть?...

PS: LIB файл сделал утилитой implib.exe и включил в проект.... :(
309
24 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Не может найти реализацию конструктора объекта. Почему - не знаю :(
92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
вот вот вот, и я про то же.... ((((
92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
что, ни у кого больше никаких соображений на этот счет нет?

(*всматривается в толпу с ожиданием и ищущим взглядом...*)

жаль...
1
24 октября 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Тень Пса]что, ни у кого больше никаких соображений на этот счет нет?

(*всматривается в толпу с ожиданием и ищущим взглядом...*)

жаль...[/QUOTE]
Объяви конструктор виртуальным.
92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
спасибо, попробую
92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
[QUOTE=kot_]Объяви конструктор виртуальным.[/QUOTE]

если имеется ввиду вот так:

 
Код:
class LIBGDI_2_API CChart {
private:
    int count;
public:
    virtual CChart(void);
    int getCount();
};


то не проканало.... при компиляции библиотеки даёт "error C2633: 'CChart' : 'inline' is the only legal storage class for constructors"

без объявления конструктора virtual компилится отлично и на ура(!), утилита tdump.exe, в разделе Export, дает про DLL следующую инфу:

Цитата:

Section: Exports
Flags: 00000000
Time Stamp: 453E42B9 : Tue Oct 24 23:43:37 2006
Major Version: 0000
Minor Version: 0000

Exports from libgdi_2.dll
5 exported name(s), 5 export addresse(s). Ordinal base is 1.
Sorted by Name:
RVA Ord. Hint Name
-------- ---- ---- ----
00001019 1 0000 ??0CChart@@QAE@XZ <- класс
00001014 2 0001 ??4CChart@@QAEAAV0@ABV0@@Z <- конструктор
00001005 3 0002 ?getCount@CChart@@QAEHXZ <- функция getCount
0000100A 4 0003 fnLibgdi_2 <-|
0002D3F0 5 0004 nLibgdi_2 <-| переменная и функция помимо класса в DLL



вот :(

ЗЫ: libgdi_2.h и libgdi_2.lib в проект добавил...

92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
в Билдере только потому что тестить легче как-то.... ну не привык я к огромному количеству кода и отсутсвию Дизайнера Окна всегда под рукой =))

В Вижуал Ц++ 6 все работает, все рисуется (потому как либа собссна и есть для рисования, а это просто для примера было).

Но если все-таки кто-то разберется почему не импортится в Билдер... буду ОЧЕНЬ признателен!

ЗЫ: вопрос остаётся открытым :)
309
25 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Касательно использования tdump.
Есть такой очень мощный программный комплекс Total Commander. И у него не менее мощный вьювер. Так вот, к этому вьюверу идёт туева хуча плугинов, которые в совокупности просматривают всё, в том числе и исполняемый код.
Модуль FileInfo (у меня v.2, но есть и новее), не просто выводит все экспортируемые элементы exe, dll, bpl и многих других файлов, но и расшифровывает их, отображая вместо абракадабры полные имена использующих классов и требуемых параметров.
Идеальное средство для проверки своих пакетов на экспортируемость :D.
92
25 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
сказал же, всё экпортируется, и мне довольно удобно пользовать tdump и Depends от M$ ))))) (при условии что всё работает окэй в студии, а в частности в VC++, но не работает в Билдере). Поэтому, Уважаемый el scorpio, утилит мне хватает. Но(!) всё равно, спасибо за совет! На досуге заценю )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог