Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2010, 20:54   #1
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
Злость Работа с динамическим подключением DLL

здраствуйте работаю с DLL и ее динамическом подключении к приложению. У меня есть Builder 2006 и следующий код;

Так описана функция в библиотеке DLL
char * Code_Dec (char *s, char Key)
{
for (int i = 0; ; i++)
{
if (s[i] == '0') break;
s[i] = s[i] ^ Key;
}
retyrn s;
}

Так я ее в приложении подключаю
HINSTANCE hDLL;
typedef char (_import * FType (char*));
FType * MyFunc;

hDLL = LoadLibrary ("Project1.dll");
if (hDLL !=0)
MyFunc = (FType *) GetProcAddress(hDLL,"Code_Dec");
else ShowMessage ("Не удача в загрузки");

if (MyFunc)
Label1->Caption = MyFunc ("Привет");
else ShowMessage ("Функция не доступна");

После компиляции и выполнение файла .exe выдается сообщение = Функция не доступна
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 01.03.2010, 20:58   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А как экспортируете функцию? Имя точно такое? Проверьте в каком-нибудь просмотровщике PE секцию экспорта
netrino вне форума Ответить с цитированием
Старый 01.03.2010, 23:47   #3
d9m0n
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 29
По умолчанию

при экспорте функции Code_Dec имя экспортируемой функции декорируется в Code_Dec@@@@, или во что то типа того.
Чтобы этого избежать можно объявить функцию как extern "C"
или явно прописать в def файле имена экспортируемых функций.
d9m0n вне форума Ответить с цитированием
Старый 02.03.2010, 21:01   #4
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию цитата

Цитата:
Сообщение от d9m0n Посмотреть сообщение
при экспорте функции Code_Dec имя экспортируемой функции декорируется в Code_Dec@@@@, или во что то типа того. Не пробовал объясните как точно.

Чтобы этого избежать можно объявить функцию как extern "C" = пробовал с тем же результатом

или явно прописать в def файле имена экспортируемых функций.
А как такое произвести
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 02.03.2010, 23:15   #5
d9m0n
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Assemblerru Посмотреть сообщение
А как такое произвести
PHP код:
extern "C" char Code_Dec (char *schar Key)
{
for (
int i 0; ; i++)
{
if (
s[i] == '0') break;
s[i] = s[i] ^ Key;
}
retyrn s;

или так с def файлом:

PHP код:
LIBRARY "MyDLL.DLL" 

EXPORTS 
Code_Dec 
d9m0n вне форума Ответить с цитированием
Старый 05.03.2010, 20:37   #6
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

Цитата:
Сообщение от d9m0n Посмотреть сообщение
[PHP]
extern "C" char * Code_Dec (char *s, char Key)
.......Так попробовал с тем же результатом Т. Е. Не удача в загрузки

или так с def файлом:

PHP код:
LIBRARY "MyDLL.DLL" 

EXPORTS 
Code_Dec 
Не знаю но на ютот код компилятор дает ошибку подскажите что не так я делаю.
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 05.03.2010, 20:48   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

а
Код:
LIBRARY "MyDLL.DLL"

EXPORTS
    Code_Dec
куда пишите? Я надеюсь не в файл с кодом программы? ) Нужно писать в .def файл и указать в настройках компиляции, как он называется
netrino вне форума Ответить с цитированием
Старый 07.03.2010, 18:58   #8
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

разбираюсь но пока не получается.
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 08.03.2010, 09:40   #9
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Assemblerru нужно использовать соглашение stdcall:
Код:
extern "C" __declspec(dllexport) void __stdcall Show();

#pragma argsused

//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
	return 1;
}
//---------------------------------------------------------------------------
void __stdcall Show()
{
   MessageBox(NULL, "Hello", "Inf", MB_OK);
   return 0;
}

Последний раз редактировалось profi; 08.03.2010 в 09:45.
profi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с подключением dll библиотеки Tan4ik Помощь студентам 7 01.03.2010 21:02
Работа с динамическим таймером S@fer Общие вопросы Delphi 1 06.05.2009 09:00
Работа с подключением к интернету delphin100 Работа с сетью в Delphi 4 05.02.2009 08:14
Работа с динамическим массивом sand Общие вопросы C/C++ 3 22.08.2008 12:48
Работа с динамическим массивом и его елементами Padovan Паскаль, Turbo Pascal, PascalABC.NET 2 21.05.2008 20:55