С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 4
1

DLL в borland c++

28.07.2009, 23:53. Показов 2735. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Пример кода в dll:
 
int count;
 
int __stdcall __export f_001(const char* cst)
{
  count++;
  ...
  return count;
}
 
//Пример в ехе:
 
int GetCount()
{
  int count;
  ...
  FARPROC f_001_dll = GetProcAddres(dll, "f_001");
  int count = f_001_dll("lalala");
 
 return count;
}
Люди подскажите!!! Как сделать так чтобы count в DLL увеличевался на 1
при каждом вызове GetCount в exe.

У меня при каждом вызове GetCount count = 1;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2009, 23:53
Ответы с готовыми решениями:

Открыть dll из Borland в Visual Studio
Доброго времени суток! Я сталкнулась с одной проблемой. Помогите пожалуйста разобраться. У меня...

Borland C++ Builder 6.0 не может найти свои же dll файлы
Недавно установил Borland C++ Builder 6.0 . Всё бы хорошо но при компиляции проэкта пишет что не...

Создание DLL в Borland C++ 3.1
Приветствую вас многоуважаемые прогеры!) У меня возникла проблема в написании драйвера для...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual...

6
Айхрень...
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077
29.07.2009, 00:06 2
Цитата Сообщение от gon21 Посмотреть сообщение
//Пример кода в dll:
int count;
а где, собственно, задание первоначального значения переменной?
плюс Вам нужно текст

Цитата Сообщение от gon21 Посмотреть сообщение
int count;
...
FARPROC f_001_dll = GetProcAddres(dll, "f_001");
вынести за пределы Вашей функции, так как при каждом её вызове эти значения переопределяются на начальные. Вставьте это в код, где у вас инициализируется переменная dll

Добавлено через 3 минуты 11 секунд
Точнее даже что-то на подобие этого. Уже сплю, поэтому мог иошибиться

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main()
{
  int dll = LoadLibrary(...);
  ...
  FARPROC f_001_dll = GetProcAddres(dll, "f_001");
  GetCount(f_001_dll);
}
 
int GetCount(FARPROC f_001_dll)
{
int count = f_001_dll("lalala");
 
return count;
}
0
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 4
29.07.2009, 00:24  [ТС] 3
Мне нужно так чтоб работоло...

загрузить 1-ну копию dll
и потом многократно вызывать F_001_dll из разных процесов, и
при каждом вызове f_001_dll count в dll должен увеличевотся на 1.

как мне это правильно сделать?

Добавлено через 10 минут 18 секунд
вот мне гдето подсказали. непашит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int(far* f_001_dll)(const char*);
HANDLE dll = GetModuleHandle("mydll");
(FARPROC)faddr = GetProcAddress(dll,"f_001_dll");            //теперь попробывал отсюда. непашит.
 
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR cl, int)
{
   char buf[255];
 
        CreateMutex(0, 1, "cmx1");
 
           if(GetLastError()!=ERROR_ALREADY_EXISTS)
           {
                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->CreateForm(__classid(TForm2), &Form2);
                 Application->Run();
           }
           else
           {
             //(FARPROC)faddr = GetProcAddress(dll,"f_001_dll");         //сдесь раннше вызывал
             wsprintf(buf, "RulMain = %x0", dll);
             MessageBox(0, buf, "", MB_OK);
             if((FARPROC)f_001_dll)
             {
               int count = f_001_dll("lalala");
              
             }
        return 0;
}
0
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
29.07.2009, 18:25 4
Вот так будет работать с процессами.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//////////////////////////////
//
// Эту переменную нужно поместить в шаред секцию. Читай в справке борланда по длл как они там создаются. Это пример для визуал студии.
 
#pragma data_seg("shared")
long count = 0;
#pragma data_seg()
#pragma comment(linker, "section:shared,rws")
//
/////////////////////////////
 
int __stdcall __export f_001(const char* cst)
{
   long res;
   res =  InterlockedIncrement(&count);
    ...
   return res;
}
0
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 4
30.07.2009, 22:54  [ТС] 5
Спосибо попоробую сегодня.

Добавлено через 5 часов 27 минут 15 секунд
[QUOTE=Alexandoros;228013]Вот так будет работать с процессами.
[CPP]
//////////////////////////////

Както умена не пошло, а точнее ничего не изменилось.
A вообще мине надо чтоб эта DLL из других процесов вызывалась бы
по GetModuleHandle("My_dll");

Добавлено через 2 минуты 41 секунду
Кстати с семафорами вроде поучается, но немножко нето.
0
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
30.07.2009, 23:58 6
GetModuleHandle("My_dll");
юзать нуна LoadLibrary
0
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 4
31.07.2009, 00:11  [ТС] 7
Она же вроде каждый раз новую копию загружает.
0
31.07.2009, 00:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2009, 00:11
Помогаю со студенческими работами здесь

Подскажите где можно найти Borland C++ Builder или Borland Developer Studio 2006 C++ ? Очень надо.
Подскажите где можно найти Borland C++ Builder или Borland Developer Studio 2006 C++ ? Очень надо.

Русские хелпы по Borland C++ 5.* и Borland C++ Bulder
Подскажите где найти русские хелпы на Borland C++ 5.* и Borland C++ Bulder ...

не могу запустить ехешник ,Borland 5 и Borland 6
вообщем написал прогу , писал в 6рке когда компилю ругается на Build MYBASE.h(348): E2451...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru