Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Ошибка при выполнении


Автор: ZufuS 8.3.2007, 14:22
Добавил в проект модуль
Код

//modul.h
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#ifndef modulH
#define modulH
void zLineTo()
{
        Form1->Canvas->LineTo(100,100);
}
#endif

в главном модуле в обработчик OnClick написал
Код

void __fastcall TForm1::FormClick(TObject *Sender)
{
        zLineTo();                   
}

Если в приложении кликнуть на форму, вылезет ошибка. Но если вместо вызова функции zLineTo() написать её содержимое, то ошибки не будет.
http://dump.ru/files/8/8103619553/

Автор: Fazil6 8.3.2007, 14:34
мда...
Вообще из каких соображений ты так сделал?
и еще какая ошибка вылазит у тебя? Скачал я твой проект, но у меня никакой ошибки нет

Автор: ZufuS 8.3.2007, 14:38
Цитата(Fazil6 @  8.3.2007,  14:34 Найти цитируемый пост)
Вообще из каких соображений ты так сделал?

Не понял.
Цитата(Fazil6 @  8.3.2007,  14:34 Найти цитируемый пост)
и еще какая ошибка вылазит у тебя?

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 400b6dcb in module 'vcl60.bpl'. Read of address 00000000'. Process stopped. Use Step or Run to continue.

Автор: Fazil6 8.3.2007, 14:59
вот так нужно делать по уму такие вещи
Код

// modul.h
#ifndef modulH
#define modulH

#include <Forms.hpp>

void zLineTo(TForm *frm);

#endif

Код

// modul.cpp
#include "modul.h"

void zLineTo(TForm *frm)
{
        frm->Canvas->LineTo(100,100);
}

Код

// unit1.cpp
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Modul.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormClick(TObject *Sender)
{
        zLineTo(this);
}


Добавлено @ 15:01 
совсем правильно функции в modul.h помещать в namespace какой-нибудь

Автор: ZufuS 8.3.2007, 15:16
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)