Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Access Violation | IntraWEB


Автор: VOX 15.10.2009, 15:35
Здравствуйте! Сабж,
не знаю даже на что думать,
тот же код не под веб работает
нормально. Прошу подскажите
в чём моя ошибка. Спасибо!
Код

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "IWBaseControl"
#pragma link "IWBaseHTMLControl"
#pragma link "IWCompButton"
#pragma link "IWCompText"
#pragma link "IWControl"
#pragma link "IWVCLBaseControl"
#pragma link "IWBaseComponent"
#pragma link "IWBaseHTML40Component"
#pragma link "IWBaseHTMLComponent"
#pragma link "IWExtCtrls"
#pragma link "IWCompMemo"
#pragma link "IWCompLabel"
#pragma link "IWCompEdit"
#pragma resource "*.dfm"
TIWForm1 *IWForm1;
const sourceLeft = 281;
const sourceTop = 196;
const  wchar_t ClassIdent[] =L"TMemo";
const int iCountButton = 21;
typedef struct
{
    char  wcsWindowText[256];
    TRect WinRect;
}
WINDOWPARAM, *PWINDOWPARAM;
bool __stdcall EnumFunc(HWND hWnd, LPARAM param);
//---------------------------------------------------------------------------
__fastcall TIWForm1::TIWForm1(TComponent* Owner)
        : TIWAppForm(Owner)
{

}
//---------------------------------------------------------------------------

void setAsMainForm() {
  TIWForm1::SetAsMainForm();
 }
#pragma startup setAsMainForm
bool __stdcall EnumFunc(HWND hWnd, LPARAM param)
{
    //Тело ф-ии
    WINDOWPARAM *sorceWindParam =(WINDOWPARAM*)param;
    char cname_needed[256] = "TMemo";
    char cname[256] = "";
    GetClassName(hWnd, cname, 256);
    char ctext[256] = "";
    SendMessage(hWnd, WM_GETTEXT, 255, (LPARAM)ctext);
    int res;
    res = strncmp(cname_needed,cname,99);
    if (res == 0 )
    {
    ::IWForm1->IWMemo1->Lines->Add(ctext);
    }
    return true;
}
void __fastcall TIWForm1::IWTimer1Timer(TObject *Sender)
{
//Перечисляем в мемо
    WINDOWPARAM WinParam = {0};
    IWMemo1->Lines->Clear();
    HWND hWnd = 0;
    hWnd = FindWindowW(L"TF_KgaViewMain" , NULL );
    EnumChildWindows (hWnd,(WNDENUMPROC)EnumFunc, (LPARAM)&WinParam);
//Добавляем Текст
    IWEdit40->Text=IWForm1->IWMemo1->Lines->Strings[0];
    IWEdit39->Text=IWForm1->IWMemo1->Lines->Strings[1];
    IWEdit38->Text=IWForm1->IWMemo1->Lines->Strings[2];
    IWEdit37->Text=IWForm1->IWMemo1->Lines->Strings[3];
    IWEdit36->Text=IWForm1->IWMemo1->Lines->Strings[4];
    IWEdit35->Text=IWForm1->IWMemo1->Lines->Strings[5];
    IWEdit34->Text=IWForm1->IWMemo1->Lines->Strings[6];
    IWEdit33->Text=IWForm1->IWMemo1->Lines->Strings[7];
    IWEdit32->Text=IWForm1->IWMemo1->Lines->Strings[8];
    IWEdit31->Text=IWForm1->IWMemo1->Lines->Strings[9];
    IWEdit30->Text=IWForm1->IWMemo1->Lines->Strings[10];
    IWEdit29->Text=IWForm1->IWMemo1->Lines->Strings[11];
    IWEdit28->Text=IWForm1->IWMemo1->Lines->Strings[12];
    IWEdit27->Text=IWForm1->IWMemo1->Lines->Strings[13];
    IWEdit26->Text=IWForm1->IWMemo1->Lines->Strings[14];
    IWEdit25->Text=IWForm1->IWMemo1->Lines->Strings[15];
    IWEdit24->Text=IWForm1->IWMemo1->Lines->Strings[16];
    IWEdit23->Text=IWForm1->IWMemo1->Lines->Strings[17];
    IWEdit22->Text=IWForm1->IWMemo1->Lines->Strings[18];
    IWEdit21->Text=IWForm1->IWMemo1->Lines->Strings[19];
    IWEdit20->Text=IWForm1->IWMemo1->Lines->Strings[20];
    IWEdit19->Text=IWForm1->IWMemo1->Lines->Strings[21];
    IWEdit18->Text=IWForm1->IWMemo1->Lines->Strings[22];
    IWEdit17->Text=IWForm1->IWMemo1->Lines->Strings[23];
    IWEdit16->Text=IWForm1->IWMemo1->Lines->Strings[24];
    IWEdit15->Text=IWForm1->IWMemo1->Lines->Strings[25];
    IWEdit14->Text=IWForm1->IWMemo1->Lines->Strings[26];
    IWEdit13->Text=IWForm1->IWMemo1->Lines->Strings[27];
    IWEdit12->Text=IWForm1->IWMemo1->Lines->Strings[28];
    IWEdit11->Text=IWForm1->IWMemo1->Lines->Strings[29];
    IWEdit10->Text=IWForm1->IWMemo1->Lines->Strings[30];
    IWEdit9->Text=IWForm1->IWMemo1->Lines->Strings[31];
    IWEdit8->Text=IWForm1->IWMemo1->Lines->Strings[32];
    IWEdit7->Text=IWForm1->IWMemo1->Lines->Strings[33];
    IWEdit6->Text=IWForm1->IWMemo1->Lines->Strings[34];
    IWEdit5->Text=IWForm1->IWMemo1->Lines->Strings[35];
}
//---------------------------------------------------------------------------


Автор: 586 15.10.2009, 17:57
Цитата(VOX @  15.10.2009,  16:35 Найти цитируемый пост)
bool __stdcall EnumFunc(HWND hWnd, LPARAM param)

bool и BOOL - это разные вещи. sizeof(BOOL) == 4, sizeof(bool) == 1.

Код
BOOL CALLBACK EnumFunc(HWND hWnd, LPARAM param)
{
    //WINDOWPARAM *sorceWindParam =(WINDOWPARAM*)param;  // нигде не используется...
    char cname[256] = "";
    GetClassName(hWnd, cname, 256);
    char ctext[256] = "";
    SendMessage(hWnd, WM_GETTEXT, 255, (LPARAM)ctext);

    if (strcmp(cname, "TMemo") == 0)
    {
        ::IWForm1->IWMemo1->Lines->Add(ctext);
    }
    return TRUE;
}

Автор: shklowsky 16.10.2009, 00:02
думаю, причина здесь:

Цитата(VOX @  15.10.2009,  15:35 Найти цитируемый пост)
void __fastcall TIWForm1::IWTimer1Timer(TObject *Sender)


При небольшом значении интервала(или длительной обработки процедуры)
Таймер при входе в onTimer надо бы остановить, при выходе снова запустить.
иначе возможны "налезания " тиков таймера один на другой, и, как результат,
конфликт доступа потоков к компоненту.

Автор: VOX 16.10.2009, 09:54
Всем спасибо + и +
Решено!

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