Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не работает простейший код DLL!

26K
04 октября 2008 года
dufifa
56 / / 21.08.2008
Здарова, программисты!!
У меня вот проблема, но никак не могу решить - видно сильно тупить стал. Это сделать указатель на RichEdit, для дальнейшего его использования в другой форме...У меня такая DLL:
Код:
#include <vcl.h>
#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();
}

Далбше идёт к нему заголовочный файл:
Код:
#ifndef _test
#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

//----------------------------
Тут выдаёт ошибку, видно что-то не так делаю, наверное то что-то а всё не так делаю.....помогите пожалуйста..
1
05 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: dufifa
Здарова, программисты!!
У меня вот проблема, но никак не могу решить - видно сильно тупить стал. Это сделать указатель на RichEdit, для дальнейшего его использования в другой форме...У меня такая DLL:
Код:
#include <vcl.h>
#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();
}

Далбше идёт к нему заголовочный файл:
Код:
#ifndef _test
#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)?

 
Код:
extern "C" __declspec (dllexport) void __stdcall Cut(TRichEdit *Rich)
{
 Rich->CutToClipboard();
}
1
05 октября 2008 года
kot_
7.3K / / 20.01.2000
зачем делать определение макроса если он нигде не используется?
1
05 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: dufifa
й форме...У меня такая DLL:
 
Код:
extern "C" __declspec (dllexport) void __stdcall Cut(TRichEdit *Rich)
{
 Rich->CutToClipboard();
}

Далбше идёт к нему заголовочный файл:
Код:
#ifndef _test
#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


где объявлена функция которую вы собираетесь экспортировать из длл? вы тупее чем чехи.

1
05 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: kot_
зачем делать определение макроса если он нигде не используется?


хотя используется - это я ошибся. Но это не отменяет требования приводить ошибки и нормально формулировать свой вопрос.

1
05 октября 2008 года
kot_
7.3K / / 20.01.2000
из этических соображений слова дебил и кретин из своего сообщения убрал. Но смысла это не меняет :)
26K
05 октября 2008 года
dufifa
56 / / 21.08.2008
Во-первых,из статических соображений я убрал из этого сообщения такие слова, которые ты в жизни не видел.
Во-вторых, модераторик, ты сам же нарушаешь правила форума CodeNet.
В-третьих я покапался в инциклопедии и нашёл кое-какие данные:
//---------------------------------------------------------------------
__import и __export.
__import означает, что функция импортируется,т.е.как я прочитал, ссылка на оюъявленную функцию содержится в файле библиотеки импорта,соответственно второе значение-функция экспортируется...
//---------------------------------------------------------------------
модификатор extern "C" нужен для каждой автономной функции, т.е. обеспечивает импортфункции любым приложением...
//-----------------------------------------------------------------------
__declspec()
-нужен для помещения модификатора в любом месте объявления функции...
//-----------------------------------------------------------------------
Я изменил данный код из моих соображений на этот:
 
Код:
extern "C" __declspec (dllexport) void Cut()
{
}

//-----------------Dll.h
 
Код:
extern "C" void Cut();

Вроде всё норм, но как сделать ссылку на RichEdit для его использования??
//---------------------------------------------------------
И на последок: Не надо на меня наезжать и тем более оскорблять. Если я в чем-то не прав, то можно объяснить или поправить, а такие выкрутасы не сделают ни меня ни тебя умнее....
26K
05 октября 2008 года
dufifa
56 / / 21.08.2008
Ок!Всё...решил....спасибо!!
1
05 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: dufifa
Во-первых,из статических соображений я убрал из этого сообщения такие слова, которые ты в жизни не видел.
Во-вторых, модераторик, ты сам же нарушаешь правила форума CodeNet.
В-третьих я покапался в инциклопедии и нашёл кое-какие данные:


во первых постарайся выяснить хотябы приблизительный смысл слов, которые ты используешь. Это тебе никак не помешает. я понимаю что в вашей школе для слаборазвитых не знают значение слова статический - ну что сделаешь. Но если ты его используешь - то хотябы выясни что оно значит. Или ты из новосоветских республик? тогда обращайся на свой грузинский или украинский форум. Может там тебе чтото подскажут.

Цитата: dufifa

//---------------------------------------------------------------------
__import и __export.
__import означает, что функция импортируется,т.е.как я прочитал, ссылка на оюъявленную функцию содержится в файле библиотеки импорта,соответственно второе значение-функция экспортируется...
//---------------------------------------------------------------------
модификатор extern "C" нужен для каждой автономной функции, т.е. обеспечивает импортфункции любым приложением...
//-----------------------------------------------------------------------
__declspec()
-нужен для помещения модификатора в любом месте объявления функции...

//-----------------------------------------------------------------------


модификатор нужен при объявлении но не нужен при определении

Цитата: dufifa


Я изменил данный код из моих соображений на этот:
 
Код:
extern "C" __declspec (dllexport) void Cut()
{
}

//-----------------Dll.h
 
Код:
extern "C" void Cut();

Вроде всё норм, но как сделать ссылку на RichEdit для его использования??
//---------------------------------------------------------
И на последок: Не надо на меня наезжать и тем более оскорблять. Если я в чем-то не прав, то можно объяснить или поправить, а такие выкрутасы не сделают ни меня ни тебя умнее....


может быть ты плохо понимаешь русский язык - но вСЕ что от тебя требуется - это привести код ошибки. или саму ошибку. и тогда на тебя (и таких [censored] как ты) никто не будет наезжать и оскорблять.
Скорей всего - по врожденной твоей собразительности - ты не включил заголовочный файл требумый для создания указателя на RichEdit. Но так как у тебя хватает времени хамить и пререкаться со мной - но не хватает времени привести ошибку - это четко показывает твой уровень развития. А слова которые ты знаешь - я так думаю что учитывая твой уровень развития - так врядли они смогут меня обидеть - ты можешь смело засунуть твой язык в оооопу. :)

246
05 октября 2008 года
GIZMO
1.8K / / 30.07.2004
догадаетесь с трех раз ето хто? :)
490
06 октября 2008 года
frid-karatel
357 / / 15.09.2007
Цитата: GIZMO
догадаетесь с трех раз ето хто? :)



[COLOR="Gray"][SIZE="1"]Offtop: Весело живется... :D Программисты растут, блин... :)[/SIZE][/COLOR]

1
06 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: frid-karatel
[COLOR="Gray"][SIZE="1"]Offtop: Весело живется... :D Программисты растут, блин... :)[/SIZE][/COLOR]


ну надеюсь что подобные тычки парня хоть чему-то научат. Хотя хз.
Он то себя мнит кульхацкером - а его здесь гнобят и требуют выполнять какие-то правила :)

26K
06 октября 2008 года
dufifa
56 / / 21.08.2008
как до тебя допёрло, что это я, DanUnited....зато сколько радости, что меня нашли на другом форуме программистов....
//--------------------------------------------------------------------
Учтя прошлые замечания и т.п. я модифицировал код в данный:
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)
Код:
#ifndef _test
#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

Ну всё...о да, почти забыл....выдаёт вашу ошибку такого типа:
 
Код:
[Linker Error] Unresolved external '_Form1' referenced from E:\DANPRO\ИТОГОВЫЙ ПРОЕКТ 2008\TEXTPRO HTML V.2008\DATA.OBJ

Помогите пожалуйста, GIZMO and _kot...и другие, более умные программисты, которые не переговариваются и не хамят...
1
06 октября 2008 года
kot_
7.3K / / 20.01.2000
Ну видишь, если тебя как следует пнуть - ты начинаешь вести себя почти как нормальный человек. :) ну почти как нормальный.
Ошибка говорит о том что класс TForm1 у тебя объявлен, но рализацию компилятор найти не может.
Скорей всего проблема в этом
 
Код:
#define DLL_EXP

макрос не закончен ИМХО. и заголовочный файл не включен.
26K
06 октября 2008 года
dufifa
56 / / 21.08.2008
//--------------------------------------------------------------------
Обращение к таким модераторам как GIZMO - не надо удалять просто так мои сообщения из-за злости. Я тоже может такое хочу сделать из-за этого, но не делаю....
//---------------------------------------------------------------------
И так к вопросу....
Я немного не понял,какой заголовочный файл не включён...
Во-вторых, я не понял на счёт #define DLL_EXP....по мнению кота, ошибка именно из-за него, тогда логически предположить, если я его н..фиг удалю из кода ошибки не должно быть, однако ошибка всё равно остаётся....
В-третьих, я понял, что в RESOURCE.H нужно подключать класс формы, который будеть экспортироваться, однако я не знаю, как это сделать...
1
06 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: dufifa
//--------------------------------------------------------------------
Обращение к таким модераторам как GIZMO - не надо удалять просто так мои сообщения из-за злости. Я тоже может такое хочу сделать из-за этого, но не делаю....
//---------------------------------------------------------------------


какие конкретно твои сообщения были удалены как ты выразился "изза злости"? Что это за наезды?

Цитата: dufifa

И так к вопросу....
Я немного не понял,какой заголовочный файл не включён...
Во-вторых, я не понял на счёт #define DLL_EXP....по мнению кота,
ошибка именно из-за него, тогда логически предположить, если я его н..фиг удалю из кода ошибки не должно быть, однако ошибка всё равно остаётся....


тебе надо или убрать полностью макрос и его использование вот здесь:

 
Код:
class DLL_EXP TForm1 : public TForm;

или дописать в что он будет разворачиваться.
Цитата: dufifa

В-третьих, я понял, что в RESOURCE.H нужно подключать класс формы, который будеть экспортироваться, однако я не знаю, как это сделать...



трудно сказать что конкретно надо сделать - потому что непонятно что вообще делает твой код. Где у тебя определен класс TForm1? Зачем он нужен в коде? Как ты используешь свою длл? Зачем создавать длл - и работать сформой вот таким извращенным образом? Не понимая всего этого трудно сказать что в первую очередь тебе надо делать. Что и зачем нужен MyClass?
Короче - вопрос первый - что такое TForm1? Где она объявлена и нафига вообще она нужна?
ты судя по всему предрал чейто код и внес в него изменения - не понимая смысла - иначе трудно объяснить такой разнобой в стилях написания. :)

1
07 октября 2008 года
kot_
7.3K / / 20.01.2000
кроме того - скорей всего твою проблему решит - меню Project\Add to Project... выбираешь свою форму и добавляешь в проект. Но это решит только одну проблему :)
246
07 октября 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: dufifa

Обращение к таким модераторам как GIZMO - не надо удалять просто так мои сообщения из-за злости. Я тоже может такое хочу сделать из-за этого, но не делаю....


Мне очень нравятся твои сообщения :), но сам понимаешь, что правила есть правила.
Оформляй соответствующим образом свои мысли (в первую очередь) и посты, называй темы адекватно. чтоб можно было понять о чем идет речь ("Не работает простейший код!" - не катит, тогда уж можно писать "Руки растут из ж... - помогите!")

Я не злюсь на тебя, мне смешно, но чтоб не засирать форум пиши в личку или Сюда

ЗЫ: последующие сообщения только в личку
ЗЗЫ: и не надо мне слать предложение дружбы, я дружу только с дэвочками:)

43K
07 октября 2008 года
cbuilder2009
1 / / 07.10.2008
а у меня чот-то возникают ошибки, типа
[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
.....Почему??
1
07 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: cbuilder2009
а у меня чот-то возникают ошибки, типа
[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
.....Почему??


боюсь дружище что тебе прийдется искать ответы на другом форуме - где возможно модераторы более либеральны. А до тех пор - все твои сообщения будут удалятся. уж извини.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог