Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание хедера для dll 
:(
    Опции темы
Xela
Дата 7.6.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Как в dll - проекте написать .h файл так чтобы Эту dll-ку можно было присоединять как статически так и динамически к приложению??
PM MAIL   Вверх
SenkraD
Дата 7.6.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Вот так кажись:
Код

#ifndef _UMYDLL_H
#define _UMYDLL_H

#ifdef __DLL__
# define DLL_EI __declspec(dllexport)
#else
# define DLL_EI __declspec(dllimport)
#endif

extern "C" char * DLL_EI Code(char *s, char Key);
extern "C" void DLL_EI DoConvert();
extern "C" char* DLL_EI ShowProgressDialog(char* User);

#endif



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Xela
Дата 7.6.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Цитата(SenkraD @ 7.6.2007,  12:12)

Знакомый пример  smile 
А в .cpp как ф-ции объявляются так: ??
Код

char * Code(char *s, char Key) {}
void DoConvert() {}
char* ShowProgressDialog(char* User) {}

PM MAIL   Вверх
SenkraD
Дата 7.6.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Xela, ну да реализация так пишется


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Xela
Дата 7.6.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Цитата(SenkraD @ 7.6.2007,  13:56)
Xela, ну да реализация так пишется

Примерно так хедер с сипипишником я и определял
Тогда другой вопрос
Может знаешь как динамически вызвать например ф-цию
Код
void DoConvert()


PM MAIL   Вверх
SenkraD
Дата 7.6.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Xela,  доесть динамически загрузить DLL? Если да то так:
Код

HINSTANCE hInst;
void            (*DoConvert)(void);

// Загрузим динамическую библиотеку
hInst = LoadLibrary("XELA.dll");
if(hInst)
{
    // Если библиотека успешно загрузилась, то импортируем функции
   DoConvert = (void (*)(void))GetProcAddress(hInst, "_DoConvert");
}

if(DoConvert != NULL)
{
    // Если нашли функцию, то вызовем её
    DoConvert();
}

// Выгрузим библиотеку
DoConvert = NULL;
FreeLibrary(hInst);



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Xela
Дата 8.6.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



А не всё так просто SenkraD  smile   
Записал твой код А он не рабочий смотри:
Это хедер dll
Код

#ifndef UTestH
#define UTestH

#ifndef __DLL__
# define DLL_EI __declspec(dllexport)
#else
# define DLL_EI __declspec(dllimport)
#endif

extern "C" char * DLL_EI Code(char *s, char Key);

#endif

Это .сср -шник
Код

#include <vcl.h>
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
//---------------------------------------------------------------------------
char * Code( char *s, char key )
{
    for( int i = 0; ; i++ )
    {
        if( s[i] == '\0' )
            break;
        s[i] = s[i] ^ key;
    }
    return s;
}
//---------------------------------------------------------------------------

А это ф-ция приложения
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HINSTANCE hInst;
    char * ( *_pCode)( char *s, char key );
    hInst = LoadLibrary("Test.dll");
    if(hInst)
    {
        _pCode = ( char * ( * )( char *, char ) )GetProcAddress(hInst, "_Code");
        MessageBox( NULL, "Load DLL", "Message", MB_OK );
    }
    if( _pCode != NULL )
    {
        Edit1->Text = _pCode( Edit1->Text.c_str(), 'A' );
        MessageBox( NULL, "Function Load ", "Message", MB_OK );
    }

    _pCode = NULL;
    FreeLibrary(hInst);
}

Так вот сама библиотека загружается А вот в _pCode указатель на ф-цию не передаётся
Что ж не так??
PM MAIL   Вверх
Fazil6
Дата 8.6.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Код

HINSTANCE hInst;
   typedef  char * ( *_pCode)( char *s, char key );
   _pCode code;

    hInst = LoadLibrary("Test.dll");
    if(hInst)
    {
        code = (_pCode)GetProcAddress(hInst, "Code");

        MessageBox( NULL, "Load DLL", "Message", MB_OK );
    }
 if( code != NULL )
    {
        Edit1->Text = code( Edit1->Text.c_str(), 'A' );
        MessageBox( NULL, "Function Load ", "Message", MB_OK );
    }

    code = NULL;
    FreeLibrary(hInst);
}

имя импортируемой функции неправильное
PM MAIL   Вверх
SenkraD
Дата 11.6.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Xela,  я не видел чтобы ты подключил хедер к основнуму файлу dll, где ты функции реализируеш!!!


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Xela
Дата 11.6.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Цитата(Fazil6 @ 8.6.2007,  11:34)
имя импортируемой функции неправильное

Да нет Fazil6  Как раз эта часть кода правильно записана

Разобрался  smile !! Спасибо SenkraD Репект  smile 

Это сообщение отредактировал(а) Xela - 14.6.2007, 11:00
PM MAIL   Вверх
xDD
Дата 25.9.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.8.2008

Репутация: нет
Всего: нет



я тока начал изучать  dll в Cbuilder, у меня тут вопросик такой появился а как цеплять хедеры dll файлов к основной программе? Понимаю вопрос ламерский но я чет пока непонял)
PM MAIL   Вверх
mrbrooks
Дата 25.9.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



ого какой раритет поднял.


Цитата(xDD @  25.9.2008,  13:43 Найти цитируемый пост)
а как цеплять хедеры dll файлов к основной программе? 

зачем их "цеплять" - исходники компилишь и программно подгружаешь и вызываешь функции.

PM MAIL   Вверх
xDD
Дата 25.9.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.8.2008

Репутация: нет
Всего: нет



усе сделал

Это сообщение отредактировал(а) xDD - 26.9.2008, 17:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0950 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.