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

Объявление объекта класса из DLL C++ Builder 6 - C++

Восстановить пароль Регистрация
 
Sky_Walker
 Аватар для Sky_Walker
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 4
05.05.2013, 11:41     Объявление объекта класса из DLL C++ Builder 6 #1
Добрый день! Пишу программу которая вызывает функции из DLL с явной загрузкой. Полазил по инету, вроде все правильно делаю. Когда объявляю новый объект класса в проекте, компилятор ругается на эти 3 строчки в файле Unit1.h:
C++
1
2
3
SymbString*  DLL_EI SymbStroka=new   SymbString;
BinString*  DLL_EI BinStroka=new  BinString;
SymbString*  DLL_EI DelStroka=new  SymbString;
Вот сама библиотека.
Файл UMyDLL.h
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
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
 
#ifndef _UMYDLL_H
#define _UMYDLL_H
//Объявляем тип данных-------------------------------------------------------
typedef AnsiString T;
//---------------------------------------------------------------------------
#ifdef __DLL__
# define DLL_EI __declspec(dllexport)
#else
# define DLL_EI __declspec(dllimport)
#endif
 
extern "C"
{
void DLL_EI SetString(T s);
T DLL_EI GetString();
void DLL_EI DelCharString(T m_InString,T m_SearchString);
T DLL_EI ShowBinO();
T DLL_EI Virt();
}
 
//Объявление класса Строки---------------------------------------------------
class DLL_EI Strings{                         // абстрактный класс - базовый
public:
   T m_String;                         //переменная хранения значения
   int i;                              //переменная для цикла
   int m_Index;                        //позиция символа
   void SetString(T s);                //Запись значения в переменную s
   T GetString();                      //Чтение значения
   void DelString();                   //Удаление значения
   ~Strings(){};                       //Деструктор класса
   virtual T Virt()=0;                 //чисто виртуальный метод
};
//Объявление класса "Символьная строка (произвольная строка символов)"-------
class DLL_EI SymbString: public Strings{
private:
   int length;                         //длина строки
public:
   void DelCharString(T m_InString,T m_SearchString);//Удаление символов в строке
   T Virt();                            //Виртуальная функция
};
//Объявление класса "Двоичная строка (изображение двоичного числа)"----------
class DLL_EI BinString: public Strings{
public:
   T ShowBinO();                       //Показать двоичную строку
   T Virt();                           //Виртуальная функция
};
 
#endif
Файл UMyDLL.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
49
50
51
52
53
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include "UMyDLL.h"
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
//Запись значения------------------------------------------------------------
void Strings::SetString(T s)
{
 m_String=s;
}
//Чтение значения------------------------------------------------------------
T Strings::GetString()
 {
  return m_String;
 }
//Удаление значений----------------------------------------------------------
void Strings::DelString()
{
m_String="";
}
//Показать двоичную строку---------------------------------------------------
T BinString::ShowBinO()
{
return m_String;
}
//Удаление второй строки из первой-------------------------------------------
void SymbString::DelCharString(T m_InString,T m_SearchString)
{
length=m_InString.Length();
for (i=1;i<=length;i++)
  {
   m_Index=m_InString.Pos(m_SearchString);
        if(m_Index!=0)
        {
        m_InString.Delete(m_Index,m_SearchString.Length());
        }
   m_String=m_InString;
   }
}
//Виртуальная функция вывода значения----------------------------------------
T BinString::Virt()
{
return m_String;
}
T SymbString::Virt()
{
return "n/a";
}
А вот сами файлы проекта.
Файл Unit1.h
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
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
#include <ActnList.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TEdit *Edit1;
        TButton *Button1;
        TButton *Button2;
        TMemo *Memo1;
        TEdit *Edit2;
        TGroupBox *GroupBox1;
        TLabel *Label1;
        TLabel *Label2;
        TGroupBox *GroupBox2;
        TMainMenu *MainMenu1;
        TTimer *Timer1;
        TGroupBox *GroupBox3;
        TButton *Button6;
        TGroupBox *GroupBox4;
        TLabel *Label3;
        TButton *Button3;
        TButton *Button4;
        TButton *Button5;
        TMenuItem *N1;
        TMenuItem *N2;
        TButton *Button7;
        TMenuItem *N3;
        TMenuItem *N4;
        TActionList *ActionList1;
        TAction *Soderzh;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button5Click(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button6Click(TObject *Sender);
        void __fastcall Edit2KeyPress(TObject *Sender, char &Key);
        void __fastcall N2Click(TObject *Sender);
        void __fastcall Button7Click(TObject *Sender);
        void __fastcall N3Click(TObject *Sender);
        void __fastcall SoderzhExecute(TObject *Sender);
        void __fastcall Button2MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y);
        void __fastcall Button1MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y);
        void __fastcall Button3MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y);
        void __fastcall Button4MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y);
        void __fastcall Button5MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y);
        void __fastcall Button7MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y);
        void __fastcall Button6MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
SymbString*  DLL_EI SymbStroka=new   SymbString;
BinString*  DLL_EI BinStroka=new  BinString;
SymbString*  DLL_EI DelStroka=new  SymbString;
//---------------------------------------------------------------------------
#endif
Файл 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
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef AnsiString T;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Application->HintHidePause=1000*10;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
typedef T __cdecl(*dll_func)();
dll_func pShowBinO = NULL;
HMODULE hDLL =  LoadLibrary("UMyDLL.dll");
if(!hDLL)
 {
     ShowMessage("Не возможно загрузить DLL");
     return;
 }
 pShowBinO =  (dll_func)GetProcAddress(hDLL,"_ShowBinO");
 if(!pShowBinO)
 {
     ShowMessage("Не возможно найти функцию");
     return;
 }
ShowMessage("Показать Bin строку : "+BinStroka->ShowBinO());
 
 FreeLibrary(hDLL);
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
typedef void __cdecl(*dll_func)(T s);
dll_func pSetString = NULL;
HMODULE hDLL =  LoadLibrary("UMyDLL.dll");
if(!hDLL)
 {
     ShowMessage("Не возможно загрузить DLL");
     return;
 }
 pSetString =  (dll_func)GetProcAddress(hDLL,"_SetString");
 if(!pSetString)
 {
     ShowMessage("Не возможно найти функцию");
     return;
 }
SymbStroka->SetString(Edit1->Text);
BinStroka->SetString(Edit2->Text);
Label3->Color=clLime;
Label3->Caption="Запись произведена";
Timer1->Enabled=true;
//SymbStroka->Virt();
//BinStroka->Virt();
FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
typedef T __cdecl(*dll_func)();
dll_func pGetString = NULL;
HMODULE hDLL =  LoadLibrary("UMyDLL.dll");
if(!hDLL)
 {
     ShowMessage("Не возможно загрузить DLL");
     return;
 }
 pGetString =  (dll_func)GetProcAddress(hDLL,"_GetString");
 if(!pGetString)
 {
     ShowMessage("Не возможно найти функцию");
     return;
 }
Memo1->Lines->Add("Значение Symb строки : "+SymbStroka->GetString());
Memo1->Lines->Add("Значение Bin строки : "+BinStroka->GetString());
Memo1->Lines->Add("Вычтенная строка : "+DelStroka->GetString());
Memo1->Lines->Add("");
Label3->Color=clSkyBlue;
Label3->Caption="Чтение произведено";
Timer1->Enabled=true;
FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
typedef void __cdecl(*dll_func)();
dll_func pDelString = NULL;
HMODULE hDLL =  LoadLibrary("UMyDLL.dll");
if(!hDLL)
 {
     ShowMessage("Не возможно загрузить DLL");
     return;
 }
 pDelString =  (dll_func)GetProcAddress(hDLL,"_DelString");
 if(!pDelString)
 {
     ShowMessage("Не возможно найти функцию");
     return;
 }
SymbStroka->DelString();
BinStroka->DelString();
DelStroka->DelString();
Label3->Color=clRed;
Label3->Caption="Удаление произведено";
Timer1->Enabled=true;
FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Label3->Color=clSkyBlue;
//Label3->Caption="- - - - - - - - - - - - - - - - - - - - -";
Timer1->Enabled=false;        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
typedef void __cdecl(*dll_func)(T m_InString,T m_SearchString);
dll_func pDelCharString = NULL;
HMODULE hDLL =  LoadLibrary("UMyDLL.dll");
if(!hDLL)
 {
     ShowMessage("Не возможно загрузить DLL");
     return;
 }
 pDelCharString =  (dll_func)GetProcAddress(hDLL,"_DelCharString");
 if(!pDelCharString)
 {
     ShowMessage("Не возможно найти функцию");
     return;
 }
DelStroka->DelCharString(SymbStroka->m_String,BinStroka->m_String);
Label3->Color=clLime;
Label3->Caption="Операция произведена";
Timer1->Enabled=true;
FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{
Memo1->Clear();        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
if ((Key == '0') || (Key == '1') || Key == VK_BACK) {} else Key=0;        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N2Click(TObject *Sender)
{
ShowMessage("студент ТГНГУ гр.АСОиУз-10-1 Веселов А.М.");        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button7Click(TObject *Sender)
{
typedef T __cdecl(*dll_func)();
dll_func pVirt = NULL;
HMODULE hDLL =  LoadLibrary("UMyDLL.dll");
if(!hDLL)
 {
     ShowMessage("Не возможно загрузить DLL");
     return;
 }
 pVirt =  (dll_func)GetProcAddress(hDLL,"_Virt");
 if(!pVirt)
 {
     ShowMessage("Не возможно найти функцию");
     return;
 }
ShowMessage("Символьная строка: "+SymbStroka->Virt()+"; Двоичная строка: "+BinStroka->Virt());
FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N3Click(TObject *Sender)
{
ShowMessage("Программа написана для защиты курсовой работы по Технологии программирования");
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SoderzhExecute(TObject *Sender)
{
WinHelp(Form1->Handle,"Help1.hlp",HELP_CONTEXT,1);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Button2->SetFocus();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Button1->SetFocus();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Button3->SetFocus();        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Button4->SetFocus();        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button5MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Button5->SetFocus();        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button7MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Button7->SetFocus();        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Button6->SetFocus();        
}
//---------------------------------------------------------------------------
Подскажите как правильно объявить объекты класса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2013, 11:41     Объявление объекта класса из DLL C++ Builder 6
Посмотрите здесь:

C++ Объявление структуры и класса
Объявление в классе объекта другого класса C++
C++ Объявление объекта внутри функции
Объявление статического объекта C++
Объявление и создание глобальной структуры в dll C++
C++ Создание копии объекта используя объявление через указатель
Сократить объявление auto_ptr для вновь создаваемого объекта C++
C++ Объявление объекта класса
C++ Объявление объектов класса
C++ Классы объявление объекта
Объявление объекта вложенного класса C++
Объявление объекта класса fstream в качестве статической компоненты другого класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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