Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77

создание DLL

17.03.2012, 09:38. Показов 2240. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста понять что не так сделала 8)))) может что-то странное в коде Program1.dll
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <windows.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
//   Important note about DLL memory management when your DLL uses the
//   static version of the RunTime Library:
//
//   If your DLL exports any functions that pass String objects (or structs/
//   classes containing nested Strings) as parameter or function results,
//   you will need to add the library MEMMGR.LIB to both the DLL project and
//   any other projects that use the DLL.  You will also need to use MEMMGR.LIB
//   if any other projects which use the DLL will be performing new or delete
//   operations on any non-TObject-derived classes which are exported from the
//   DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
//   EXE's to use the BORLNDMM.DLL as their memory manager.  In these cases,
//   the file BORLNDMM.DLL should be deployed along with your DLL.
//
//   To avoid using BORLNDMM.DLL, pass string information using "char *" or
//   ShortString parameters.
//
//   If your DLL uses the dynamic version of the RTL, you do not need to
//   explicitly add MEMMGR.LIB as this will be done implicitly for you
//---------------------------------------------------------------------------
 
#pragma argsused
 
struct Node
 {
 int d;
 Node *daut;
 Node *next;
 };
 
typedef Node* root;
root tree;
 
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
 
extern "C"
 {
 
__declspec( dllexport ) root& AddNode(root& tree, int n)
{
 if (tree==NULL)
 {
  tree=new Node;
  tree->daut=tree->next=NULL;
  tree->d=n;
 }
 else
  if (n>=tree->d)
   tree->daut=AddNode(tree->daut,n);
  else
   tree->next=AddNode(tree->next,n);
 return tree;
}
 
 __declspec( dllexport ) Node *ReadTree(char * fname)
{
FILE *file;
int count,n;
file = fopen(fname,"r");
 if(file == NULL)
 {
 cout<<"Error! "<<GetLastError();
 getch();
 exit(1);
 }
else
{
fscanf(file, "%d", &count );
for (int i=0; i<count; i++)
{
 fscanf( file, "%d", &n );
 AddNode(tree, n);
 }
  }
fclose(file);
return tree;
}
 
__declspec( dllexport ) void WriteTree(char * fname, Node * tree)
{
 
 FILE *file;
 if (tree==NULL)
 cout<<"Tree is empty"<<endl;
 else
 {
  if (tree->next!=NULL)
    WriteTree("res.txt",tree->next);
  cout<<tree->d<<" ";
  file=fopen(fname, "a");
  fprintf(file," %d",tree->d);
  fclose(file);
  if (tree->daut!= NULL)
    WriteTree("res.txt",tree->daut);
 }
}
}
//---------------------------------------------------------------------------
Unit1.cpp
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
struct Node
 {
 int d;
 Node *daut;
 Node *next;
 };
 
typedef Node* root;
root tree;
typedef Node(__cdecl * PFGETDATE)(char * fname);
typedef void (__cdecl * PFWRITEDATE)(char * fname, Node * tree);
 
 
/*Node *ReadTree(char *fname);
void WriteTree(char * fname, Node * tree);
root& AddNode(root& tree, int n); */
 
int main(int argc, char* argv[])
{
HANDLE hLibrary;
PFGETDATE pfGetDate;
PFWRITEDATE pfWriteDate;
Node dt;
hLibrary = LoadLibrary("Project1.dll");
if (!hLibrary)
{
    pfGetDate =
        (PFGETDATE)GetProcAddress(hLibrary,"*ReadTree");
 if (pfGetDate) pfGetDate("der.txt");
 pfWriteDate =
        (PFWRITEDATE)GetProcAddress(hLibrary,"WriteTree");
 if (pfWriteDate) pfWriteDate("res.txt", &dt);
  }
            FreeLibrary(hLibrary);
 getch();
 return 0;
 }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2012, 09:38
Ответы с готовыми решениями:

Создание DLL
const __int64 MathArray = {{0, 1}, {2, 3}, {4, 5}}; Ошибок нет. но в .h ругается!!

Создание DLL
Здравствуйте!!!! Помогите пожалуйста создать dll, проблема заключается в том что вылетает множество след. ошибок 2 IntelliSense:...

Создание dll
Всем привет, лютые и бородатые прогеры :) Потихоньку изучаю язык С. Столкнулся с такой проблемой. Не могу сделать динамическую...

16
 Аватар для toxa92
167 / 94 / 11
Регистрация: 16.04.2010
Сообщений: 464
17.03.2012, 09:43
А в чем тут проблема-то?
1
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 09:48  [ТС]
там все запускается все без ошибок но он не выводит ни на экран не в файл дерево (как предполагалось)

Добавлено через 2 минуты
возмооожно.... так как еще парк часов назад я понятия не имела что такое dll я ее как то не правильно прописала... 8))
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:01
C++
1
2
3
4
5
6
7
8
Node* dt;
...
pfGetDate = (PFGETDATE)GetProcAddress(hLibrary, "ReadTree");
if(pfGetDate)
    dt = pfGetDate("der.txt");
...
if(pfWriteDate)
    pfWriteDate("res.txt", dt);
1
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:06  [ТС]
все равно не работает(
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:09
C++
1
if (hLibrary)
не
C++
1
if (!hLibrary)
иначе при успешной LoadLibrary выполнятся не будет
1
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:13  [ТС]
спасибо поняла)))) но не работает все равно... а у меня в библиотеки вообще нормально прописано или фигня полная и бред блондинки?)
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:28
может не находит dll-ку, может файл der.txt
посмотрите, что выведет
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
    Node* dt;
    hLibrary = LoadLibrary("Project1.dll");
    if(!hLibrary)
    {
        cerr << "LoadLibrary\n";
        exit(1);
    }
    pfGetDate = (PFGETDATE) GetProcAddress(hLibrary, "ReadTree");
    if(!pfGetDate)
    {
        cerr << "GetProcAddress (ReadTree)\n";
        exit(1);
    }
    dt = pfGetDate("der.txt");
    if(!dt)
    {
        cerr << "pfGetDate(\"der.txt\")\n";
        exit(1);
    }
    pfWriteDate = (PFWRITEDATE) GetProcAddress(hLibrary, "WriteTree");
    if(pfWriteDate)
    {
        cerr << "GetProcAddress (WriteTree)\n";
        exit(1);
    }
    pfWriteDate("res.txt", dt);
1
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
17.03.2012, 10:30
На глаз вроде ок. Только нужна ли в строке 39 звезда перед названием функции?
1
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:32  [ТС]
в lkk прописано со звездой))) и эти функции работали без библиотеки 8)))
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:34
значит библиотеки нет в текущей директории выполняемого процесса
1
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:39  [ТС]
ругается на 15 строке)

Добавлено через 2 минуты
выдал только GetProcAddress (*ReadTree)
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:41
C++
1
GetProcAddress(hLibrary, "ReadTree");
без звезды
1
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:46  [ТС]
исправила)))) все равно... GetProcAddress (ReadTree)
прости я уже наверное надоела тебе))))
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:51
значит не находит файл
1
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:56  [ТС]
как бы уже и полностью пути прописывала... вообщем ладно... забудь... извини что отняла время 8)))))
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
17.03.2012, 11:19
Если вы используете разные средства разработки для длл и программы соответственно, то возможно имена функций были экспортированы с искажениями. А вообще выложите коды всего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2012, 11:19
Помогаю со студенческими работами здесь

Создание .dll
Здравствуйте.Нужна помощь в создание dll.Опишите пожалуйста саму структуру dll-файла. Компилятор-g++ 4.8.1,среда-notepad++.

Создание dll библиотеки c++
Есть проект, где много заголовочных файлов. Как собрать dll библиотеку так, чтобы потом использовать только 1 заголовочный файл, а...

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

Создание библиотек DLL
Пишу в Dev-C++. Хочу создать DLL - библиотеку. Помогите разобраться в последовательность написания библиотеки DLL.

DLL. Их создание и полезность
Я слышал краем уха, что DLL это та же библиотека, только поддерживающая динамическое связывание. То есть если нам в каком-то участке кода...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru