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

создание DLL

17.03.2012, 09:38. Показов 1903. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2012, 09:38
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 2 минуты
возмооожно.... так как еще парк часов назад я понятия не имела что такое dll я ее как то не правильно прописала... 8))
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:01 4
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
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:06  [ТС] 5
все равно не работает(
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:09 6
C++
1
if (hLibrary)
не
C++
1
if (!hLibrary)
иначе при успешной LoadLibrary выполнятся не будет
1
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:13  [ТС] 7
спасибо поняла)))) но не работает все равно... а у меня в библиотеки вообще нормально прописано или фигня полная и бред блондинки?)
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:28 8
может не находит 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
6033 / 2150 / 750
Регистрация: 10.12.2010
Сообщений: 5,996
Записей в блоге: 3
17.03.2012, 10:30 9
На глаз вроде ок. Только нужна ли в строке 39 звезда перед названием функции?
1
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:32  [ТС] 10
в lkk прописано со звездой))) и эти функции работали без библиотеки 8)))
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:34 11
значит библиотеки нет в текущей директории выполняемого процесса
1
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:39  [ТС] 12
ругается на 15 строке)

Добавлено через 2 минуты
выдал только GetProcAddress (*ReadTree)
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:41 13
C++
1
GetProcAddress(hLibrary, "ReadTree");
без звезды
1
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:46  [ТС] 14
исправила)))) все равно... GetProcAddress (ReadTree)
прости я уже наверное надоела тебе))))
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.03.2012, 10:51 15
значит не находит файл
1
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:56  [ТС] 16
как бы уже и полностью пути прописывала... вообщем ладно... забудь... извини что отняла время 8)))))
0
6033 / 2150 / 750
Регистрация: 10.12.2010
Сообщений: 5,996
Записей в блоге: 3
17.03.2012, 11:19 17
Если вы используете разные средства разработки для длл и программы соответственно, то возможно имена функций были экспортированы с искажениями. А вообще выложите коды всего.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2012, 11:19

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

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

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

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

Создание DLL со строками на C++
Пробовал разные варианты создания на выходе файла DLL, который содержит несколько строк, поскольку...

Создание dll в cmake
Вообщем, у меня есть исходный код библиотеки (mydll.cpp и mydll.h)(писалось на vs2017). Что...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru