Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
gon21
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 4
#1

DLL в borland c++ - C++

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2009, 23:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос DLL в borland c++ (C++):

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

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

При компиляции DLL-проекта не создается DLL-ка - C++
Добрый день. создал в Visual Studio 2010 проект C+= типа DLL. В файл dllmain.cpp вставил вот такой код: // test.cpp: определяет...

Windows I/o без Kernel32.dll и Advapi32.dll - C++
Добрый день. Необходимо в Windows XP SP3 распечатать в стандартный поток "some text here" без прямого или косвенного использования...

Возможность Borland C++ 5.02 - C++
Можно ли создать хорошою программу на Borland C++ 5.02 :help:

Borland C++ 5.5 LINE TOOLS - C++
Привет всем! У меня только 1 вопрос КАК ВВОДИТЬ команды в Borland C++ 5.5 LINE TOOLS простите, закалибался уже ей богу...

6
Paulie
Айхрень...
306 / 174 / 4
Регистрация: 02.06.2009
Сообщений: 1,078
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
gon21
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
Alexandoros
228 / 66 / 4
Регистрация: 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
gon21
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
Alexandoros
228 / 66 / 4
Регистрация: 02.06.2009
Сообщений: 280
30.07.2009, 23:58 #6
GetModuleHandle("My_dll");
юзать нуна LoadLibrary
0
gon21
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 4
31.07.2009, 00:11  [ТС] #7
Она же вроде каждый раз новую копию загружает.
0
31.07.2009, 00:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2009, 00:11
Привет! Вот еще темы с ответами:

Посоветуйте аналог Borland c++ - C++
Знаю ,что аналог является Вижуал Бэйзик ,а есть какие-нибудь еще современные аналоги? Какие бесплатные аналоги есть?

Borland не устанавливается на Windows 7 - C++
Borland не устанавливается на Windows 7, в чем может быть проблема??

Visual C++ & Borland C++ - C++
Я хочу перейти с Borland C++ на Visual C++! И хочу узнать, сильно ли они от друг друга отличаются, есть ли в Visual C++ тип AnsiString?

32-битные регистры в Borland C++ - C++
Всем доброго времени суток! Хочу сделать программу для проигрывания мелодии через системный динамик, и решил попробовать сделать это с...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru