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

создание DLL - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
lblondy
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 09:38     создание DLL #1
Помогите пожалуйста понять что не так сделала 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;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2012, 09:38     создание DLL
Посмотрите здесь:

Создание dll C++
C++ Создание DLL
Создание resource-only DLL C++
C++ Создание библиотек DLL
C++ Создание DLL
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
toxa92
 Аватар для toxa92
167 / 94 / 2
Регистрация: 16.04.2010
Сообщений: 464
17.03.2012, 09:43     создание DLL #2
А в чем тут проблема-то?
lblondy
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 09:48  [ТС]     создание DLL #3
там все запускается все без ошибок но он не выводит ни на экран не в файл дерево (как предполагалось)

Добавлено через 2 минуты
возмооожно.... так как еще парк часов назад я понятия не имела что такое dll я ее как то не правильно прописала... 8))
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 10:01     создание DLL #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);
lblondy
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:06  [ТС]     создание DLL #5
все равно не работает(
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 10:09     создание DLL #6
C++
1
if (hLibrary)
не
C++
1
if (!hLibrary)
иначе при успешной LoadLibrary выполнятся не будет
lblondy
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:13  [ТС]     создание DLL #7
спасибо поняла)))) но не работает все равно... а у меня в библиотеки вообще нормально прописано или фигня полная и бред блондинки?)
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 10:28     создание DLL #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);
HighPredator
 Аватар для HighPredator
5351 / 1734 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
17.03.2012, 10:30     создание DLL #9
На глаз вроде ок. Только нужна ли в строке 39 звезда перед названием функции?
lblondy
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:32  [ТС]     создание DLL #10
в lkk прописано со звездой))) и эти функции работали без библиотеки 8)))
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 10:34     создание DLL #11
значит библиотеки нет в текущей директории выполняемого процесса
lblondy
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:39  [ТС]     создание DLL #12
ругается на 15 строке)

Добавлено через 2 минуты
выдал только GetProcAddress (*ReadTree)
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 10:41     создание DLL #13
C++
1
GetProcAddress(hLibrary, "ReadTree");
без звезды
lblondy
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:46  [ТС]     создание DLL #14
исправила)))) все равно... GetProcAddress (ReadTree)
прости я уже наверное надоела тебе))))
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 10:51     создание DLL #15
значит не находит файл
lblondy
 Аватар для lblondy
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 77
17.03.2012, 10:56  [ТС]     создание DLL #16
как бы уже и полностью пути прописывала... вообщем ладно... забудь... извини что отняла время 8)))))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2012, 11:19     создание DLL
Еще ссылки по теме:

C++ Создание и использование dll
Dll. Создание и использование C++
Создание COM DLL C++

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

Или воспользуйтесь поиском по форуму:
HighPredator
 Аватар для HighPredator
5351 / 1734 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
17.03.2012, 11:19     создание DLL #17
Если вы используете разные средства разработки для длл и программы соответственно, то возможно имена функций были экспортированы с искажениями. А вообще выложите коды всего.
Yandex
Объявления
17.03.2012, 11:19     создание DLL
Ответ Создать тему
Опции темы

Текущее время: 03:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru