Не работает простейший код DLL!
У меня вот проблема, но никак не могу решить - видно сильно тупить стал. Это сделать указатель на RichEdit, для дальнейшего его использования в другой форме...У меня такая DLL:
#include <windows.h>
#pragma hdrstop
#include "Resource.h"
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
//---------------------------------------------------------------------------
extern "C" __declspec (dllexport) void __stdcall Cut(TRichEdit *Rich)
{
Rich->CutToClipboard();
}
Далбше идёт к нему заголовочный файл:
#define _test
#ifdef __DLL
#define dll_test1 __declspec(dllexport)
#else
#define dll_test1 __declspec(dllimport)
#endif
extern "C" void * dll_test1 Cut(TRichEdit *Rich);
#endif
//----------------------------
Тут выдаёт ошибку, видно что-то не так делаю, наверное то что-то а всё не так делаю.....помогите пожалуйста..
У меня вот проблема, но никак не могу решить - видно сильно тупить стал. Это сделать указатель на RichEdit, для дальнейшего его использования в другой форме...У меня такая DLL:
#include <windows.h>
#pragma hdrstop
#include "Resource.h"
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
//---------------------------------------------------------------------------
extern "C" __declspec (dllexport) void __stdcall Cut(TRichEdit *Rich)
{
Rich->CutToClipboard();
}
Далбше идёт к нему заголовочный файл:
#define _test
#ifdef __DLL
#define dll_test1 __declspec(dllexport)
#else
#define dll_test1 __declspec(dllimport)
#endif
extern "C" void * dll_test1 Cut(TRichEdit *Rich);
#endif
//----------------------------
Тут выдаёт ошибку, видно что-то не так делаю, наверное то что-то а всё не так делаю.....помогите пожалуйста..
не сильнее тупить ты не стал - все на том же уровне :) сто раз вам тупарям говорят - здесь телепатов нет. НЕТ. Н Е Т !!!! и не будет. если ты хочешь получить ответ на свой вопрос - ты должен ты ДОЛЖЕН привести ошибку. Где в определении функции используют подобные конструкции? Вы беретесь писать код - так может для начала хоть выясните - что такое extern "C" __declspec (dllexport)?
{
Rich->CutToClipboard();
}
{
Rich->CutToClipboard();
}
Далбше идёт к нему заголовочный файл:
#define _test
#ifdef __DLL
#define dll_test1 __declspec(dllexport)
#else
#define dll_test1 __declspec(dllimport)
#endif
extern "C" void * dll_test1 Cut(TRichEdit *Rich);
#endif
где объявлена функция которую вы собираетесь экспортировать из длл? вы тупее чем чехи.
хотя используется - это я ошибся. Но это не отменяет требования приводить ошибки и нормально формулировать свой вопрос.
Во-вторых, модераторик, ты сам же нарушаешь правила форума CodeNet.
В-третьих я покапался в инциклопедии и нашёл кое-какие данные:
//---------------------------------------------------------------------
__import и __export.
__import означает, что функция импортируется,т.е.как я прочитал, ссылка на оюъявленную функцию содержится в файле библиотеки импорта,соответственно второе значение-функция экспортируется...
//---------------------------------------------------------------------
модификатор extern "C" нужен для каждой автономной функции, т.е. обеспечивает импортфункции любым приложением...
//-----------------------------------------------------------------------
__declspec()
-нужен для помещения модификатора в любом месте объявления функции...
//-----------------------------------------------------------------------
Я изменил данный код из моих соображений на этот:
{
}
//-----------------Dll.h
Вроде всё норм, но как сделать ссылку на RichEdit для его использования??
//---------------------------------------------------------
И на последок: Не надо на меня наезжать и тем более оскорблять. Если я в чем-то не прав, то можно объяснить или поправить, а такие выкрутасы не сделают ни меня ни тебя умнее....
Во-вторых, модераторик, ты сам же нарушаешь правила форума CodeNet.
В-третьих я покапался в инциклопедии и нашёл кое-какие данные:
во первых постарайся выяснить хотябы приблизительный смысл слов, которые ты используешь. Это тебе никак не помешает. я понимаю что в вашей школе для слаборазвитых не знают значение слова статический - ну что сделаешь. Но если ты его используешь - то хотябы выясни что оно значит. Или ты из новосоветских республик? тогда обращайся на свой грузинский или украинский форум. Может там тебе чтото подскажут.
//---------------------------------------------------------------------
__import и __export.
__import означает, что функция импортируется,т.е.как я прочитал, ссылка на оюъявленную функцию содержится в файле библиотеки импорта,соответственно второе значение-функция экспортируется...
//---------------------------------------------------------------------
модификатор extern "C" нужен для каждой автономной функции, т.е. обеспечивает импортфункции любым приложением...
//-----------------------------------------------------------------------
__declspec()
-нужен для помещения модификатора в любом месте объявления функции...
//-----------------------------------------------------------------------
модификатор нужен при объявлении но не нужен при определении
Я изменил данный код из моих соображений на этот:
{
}
//-----------------Dll.h
Вроде всё норм, но как сделать ссылку на RichEdit для его использования??
//---------------------------------------------------------
И на последок: Не надо на меня наезжать и тем более оскорблять. Если я в чем-то не прав, то можно объяснить или поправить, а такие выкрутасы не сделают ни меня ни тебя умнее....
может быть ты плохо понимаешь русский язык - но вСЕ что от тебя требуется - это привести код ошибки. или саму ошибку. и тогда на тебя (и таких [censored] как ты) никто не будет наезжать и оскорблять.
Скорей всего - по врожденной твоей собразительности - ты не включил заголовочный файл требумый для создания указателя на RichEdit. Но так как у тебя хватает времени хамить и пререкаться со мной - но не хватает времени привести ошибку - это четко показывает твой уровень развития. А слова которые ты знаешь - я так думаю что учитывая твой уровень развития - так врядли они смогут меня обидеть - ты можешь смело засунуть твой язык в оооопу. :)
[COLOR="Gray"][SIZE="1"]Offtop: Весело живется... :D Программисты растут, блин... :)[/SIZE][/COLOR]
ну надеюсь что подобные тычки парня хоть чему-то научат. Хотя хз.
Он то себя мнит кульхацкером - а его здесь гнобят и требуют выполнять какие-то правила :)
//--------------------------------------------------------------------
Учтя прошлые замечания и т.п. я модифицировал код в данный:
Data.hpp:
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#define BUILD_DLL
#include "Resource.h"
#include "MainForm.h"
#include "IniFiles.hpp"
#include "Controls.hpp"
#pragma argsused
TRichEdit *Memos[200];
//------------------------
struct IntegratedEdit
{
bool RichEdit;
TCustomEdit *pCustomEdit;
IntegratedEdit(bool bRich = false, TCustomEdit *pointer = NULL):
RichEdit(bRich), pCustomEdit(pointer)
{} //конструктор понадобится при добавлении новых членов в вектор
};
bool FC = false;
int Mini=0;
DWORD WINAPI Thread (LPVOID pParam);
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
//---------------------------------------------------------------------------
MyClass::MyClass(HWND hwnd)
{
hWnd = hwnd;
}
void MyClass::Cut(TRichEdit *Rich)
{
Rich->CutToClipboard();
}
void MyClass::PasteRich(TRichEdit *Rich2)
{
Rich2->PasteFromClipboard();
}
void MyClass::Create()
{
Form1->ListBox1->Items->Assign(Screen->Fonts);
Application->HintPause = 90;
//---------------------
TTabSheet* TabSheets[50];
int PagesCount = Form1->PageControl2->PageCount;
TabSheets[PagesCount] = new TTabSheet(this);
TabSheets[PagesCount]->PageControl = Form1->PageControl2;
TabSheets[PagesCount]->Caption = "Документ "+IntToStr(PagesCount+1);
TabSheets[PagesCount]->TabVisible = true;
TabSheets[PagesCount]->Tag = 1;
//---------
Memos[PagesCount] = new TRichEdit(this);
Memos[PagesCount]->Parent = TabSheets[PagesCount];
Memos[PagesCount]->Name = "RichEdit" + IntToStr(PagesCount);
Memos[PagesCount]->Top = TabSheets[PagesCount]->Top + 200;
Memos[PagesCount]->ScrollBars = ssBoth;
Memos[PagesCount]->Clear();
Memos[PagesCount]->PlainText = false;
Memos[PagesCount]->Align = alClient;
Memos[PagesCount]->HideScrollBars = false;
Memos[PagesCount]->HideSelection = false;
//--------------
int Pc = Form1->AdvTabSet2->AdvTabs->Count;
Form1->AdvTabSet2->AdvTabs->Add();
Form1->AdvTabSet2->AdvTabs->Items[Pc]->Caption = " Документ: "+IntToStr(PagesCount+1);
//----------------------
//------------------------
Form1->ListBox1->Items->Assign(Screen->Fonts);
Form1->ListBox1->ItemIndex = Form1->ListBox1->Items->Count/2;
//---------------------
}
Тута я типа занёс код в Data.hpp, а в главной форме я только хочу вызвать и выполнить данное....
RESOURCE.H:(заголовочный файл к Data.hpp)
#define _test
#ifdef __DLL
#define dll_test1 __declspec(dllexport)
#else
#define dll_test1 __declspec(dllimport)
#define DLL_EXP
#endif
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
class DLL_EXP TForm1 : public TForm;
class __export MyClass
{
public:
MyClass(HWND hwnd);
void Cut(TRichEdit *Rich);
void PasteRich(TRichEdit *Rich2);
void Create();
private:
HWND hWnd;
};
#endif
Ну всё...о да, почти забыл....выдаёт вашу ошибку такого типа:
Помогите пожалуйста, GIZMO and _kot...и другие, более умные программисты, которые не переговариваются и не хамят...
Ошибка говорит о том что класс TForm1 у тебя объявлен, но рализацию компилятор найти не может.
Скорей всего проблема в этом
макрос не закончен ИМХО. и заголовочный файл не включен.
Обращение к таким модераторам как GIZMO - не надо удалять просто так мои сообщения из-за злости. Я тоже может такое хочу сделать из-за этого, но не делаю....
//---------------------------------------------------------------------
И так к вопросу....
Я немного не понял,какой заголовочный файл не включён...
Во-вторых, я не понял на счёт #define DLL_EXP....по мнению кота, ошибка именно из-за него, тогда логически предположить, если я его н..фиг удалю из кода ошибки не должно быть, однако ошибка всё равно остаётся....
В-третьих, я понял, что в RESOURCE.H нужно подключать класс формы, который будеть экспортироваться, однако я не знаю, как это сделать...
Обращение к таким модераторам как GIZMO - не надо удалять просто так мои сообщения из-за злости. Я тоже может такое хочу сделать из-за этого, но не делаю....
//---------------------------------------------------------------------
какие конкретно твои сообщения были удалены как ты выразился "изза злости"? Что это за наезды?
И так к вопросу....
Я немного не понял,какой заголовочный файл не включён...
Во-вторых, я не понял на счёт #define DLL_EXP....по мнению кота,
ошибка именно из-за него, тогда логически предположить, если я его н..фиг удалю из кода ошибки не должно быть, однако ошибка всё равно остаётся....
тебе надо или убрать полностью макрос и его использование вот здесь:
или дописать в что он будет разворачиваться.
В-третьих, я понял, что в RESOURCE.H нужно подключать класс формы, который будеть экспортироваться, однако я не знаю, как это сделать...
трудно сказать что конкретно надо сделать - потому что непонятно что вообще делает твой код. Где у тебя определен класс TForm1? Зачем он нужен в коде? Как ты используешь свою длл? Зачем создавать длл - и работать сформой вот таким извращенным образом? Не понимая всего этого трудно сказать что в первую очередь тебе надо делать. Что и зачем нужен MyClass?
Короче - вопрос первый - что такое TForm1? Где она объявлена и нафига вообще она нужна?
ты судя по всему предрал чейто код и внес в него изменения - не понимая смысла - иначе трудно объяснить такой разнобой в стилях написания. :)
Обращение к таким модераторам как GIZMO - не надо удалять просто так мои сообщения из-за злости. Я тоже может такое хочу сделать из-за этого, но не делаю....
Мне очень нравятся твои сообщения :), но сам понимаешь, что правила есть правила.
Оформляй соответствующим образом свои мысли (в первую очередь) и посты, называй темы адекватно. чтоб можно было понять о чем идет речь ("Не работает простейший код!" - не катит, тогда уж можно писать "Руки растут из ж... - помогите!")
Я не злюсь на тебя, мне смешно, но чтоб не засирать форум пиши в личку или Сюда
ЗЫ: последующие сообщения только в личку
ЗЗЫ: и не надо мне слать предложение дружбы, я дружу только с дэвочками:)
[C++ Error] Resource.h(15): E2303 Type name expected
[C++ Error] Resource.h(15): E2275 { expected
[C++ Error] Resource.h(17): E2303 Type name expected
[C++ Error] MainForm.h(28): E2238 Multiple declaration for 'TForm1'
[C++ Error] Resource.h(15): E2344 Earlier declaration of 'TForm1'
[C++ Error] Data.cpp(33): E2090 Qualifier 'MyClass' is not a class or namespace name
[C++ Error] Data.cpp(33): E2040 Declaration terminated incorrectly
.....Почему??
[C++ Error] Resource.h(15): E2303 Type name expected
[C++ Error] Resource.h(15): E2275 { expected
[C++ Error] Resource.h(17): E2303 Type name expected
[C++ Error] MainForm.h(28): E2238 Multiple declaration for 'TForm1'
[C++ Error] Resource.h(15): E2344 Earlier declaration of 'TForm1'
[C++ Error] Data.cpp(33): E2090 Qualifier 'MyClass' is not a class or namespace name
[C++ Error] Data.cpp(33): E2040 Declaration terminated incorrectly
.....Почему??
боюсь дружище что тебе прийдется искать ответы на другом форуме - где возможно модераторы более либеральны. А до тех пор - все твои сообщения будут удалятся. уж извини.