Anonymní profil Jakub Dibala – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jakub Dibala – Programujte.comAnonymní profil Jakub Dibala – Programujte.com

 

Příspěvky odeslané z IP adresy 82.117.140.–

Tundra
C / C++ › error C3861: 'strcomp': iden…
21. 11. 2009   #119707

Tak jsem se už bavil všech chybových hlášek, spustil jsem to a program spadnul. Spostil jsem to v debugovacím módu a to to nespadlo, ale ono načítání modelu nějak nefunguje. A protože tý načítací části kódu prakticky nerozumím, bude to asi fakt zábava to celý debugovat... To se mám na co těšit :smile10:

Tundra
C / C++ › error C3861: 'strcomp': iden…
21. 11. 2009   #119701

No tak já tam vyzkouším ten strcmp. Bude chvíli trvat, než se dozvíme výsledek protože je tam hromada dalších chyb a část kódu jsem ještě zapoměl přepsat pro struktury, které používám, takže to nejspíš zítra napíšu sem, jak to vypadá.

Tundra
C / C++ › error C3861: 'strcomp': iden…
21. 11. 2009   #119692

To KIIV :
To jsem zkoušel už předtím a teď taky a nefuguje to. Hlásí to stále stejný error. Vkládal jsem string.h i string, přepisoval velká malá písmena, nic...

Tundra
C / C++ › error C3861: 'strcomp': iden…
21. 11. 2009   #119687

To Bald3rr :

Vpravdě mě to taky napadlo, ale jakási funkce strcomp taky existuje (http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.strcomp.aspx). Bylo to již ve funkčním kódu, tak se mi nezdá pravděpodobné, že by tam byl chyba (překompilovat jsem to nezkoušel).

Jako řešení by nejspíš také šlo prohodit to strcomp za strcmp, ale nechápu přesně, jak se od sebe ty funkce liší. Tak jestli je někdo znáte, byl bych také velmi rád za poučení.

Tundra
C / C++ › error C3861: 'strcomp': iden…
21. 11. 2009   #119685

Dobrý den, mám jeden problém při kompilaci c++ kódu.

Dělám třídu, která by měla načítat Milkshape model do proměnných, aby poté mohla být zobrazena.

Mám soubor ModelMilkshape.h:

#ifndef MODELMILKSHAPE_H

#define MODELMILKSHAPE_H

#include "../Model.h"

class ModelMilkshape : public Model
{
protected:
//data k načtení modelu - nastavována jsou potomkem této třídy
char *model_src;

public:
ModelMilkshape();
virtual ~ModelMilkshape();

virtual bool LoadModelData();
};


Tato třída dědí po třídě Model:. Model.h:
#ifndef MODEL_H

#define MODEL_H

#include "external/KMatrix.h"

class Model
{
protected:

//struktury pro model objektu
struct Vertex // Struktura vertexu
{
char m_boneID; //pro skeletálí animaci
float m_location[3]; // X, y, z souřadnice bodu (vertexu)
};

struct Triangle //struktura trojúhelníku
{
float m_vertexNormals[3][3]; //3 normálové vektory
float m_s[3], m_t[3]; //texturové koordináty
int m_vertexIndices[3]; //indexy 3 použitých vertexů
};

struct Mesh //struktura Meshe
{
int m_materialIndex; //index materiálu použitého pro mesh
int m_numTriangles; //počet trojůhelníků
int *m_pTriangleIndices; //indexy použitých trojúhelníků
};

struct Material //struktura materiálu
{
float m_ambient[4], m_diffuse[4], m_specular[4], m_emissive[4]; //nastavení světla
float m_shininess; //lesk materiálu
GLuint m_texture; //úložiště pro texturu
char *m_pTextureFilename; //adresa souboru s texturou
};

struct Keyframe // Hodnoty animace kloubu obsahující čas, rotaci a posunutí
{
int i_joint_index; // Index kloubu
float f_time; // Čas v milisekundách
float pf_parameter[3]; // Základní hodnota podle kterého se počítá vektor rotace a posunutí
};


struct Joint // Informace o kloubech kostry
{
float pf_rotation[3]; // Lokální rotace
float pf_translation[3]; // Lokální posunutí
/*
* Absolutní, či relativní matice
* Když pohnu absolutní maticí, pohnu i relativní
* Když pohnu relativní maticí, tak absolutní se nemění
*/
K_CMatrix mat_absolute, mat_relative;

int i_num_rotation_key_frames, i_num_translation_key_frames; // Počet snímků rotace a posunutí
Keyframe *p_keyframe_trans; // Ukazatel na animační hodnoty posunutí kloubu
Keyframe *p_keyframe_rot; // Ukazatel na animační hodnoty rotace kloubu

int i_current_keyframe_trans, i_current_keyframe_rot; // Aktuální posunutí a rotace
K_CMatrix mat_final; // Konečná matice

int i_parent; // Rodičovský kloub
};

protected:
double dTotalTime; // Celkový čas animace
double Time; // Čas snímku, který se má vyobrazit
double LastTime; // Absolutní čas, ve ketrém probíhala minulá část animace
double NullTime; // Čas, kdy začala animace (oproti globálnímu času) (každý cyklus animace se aktualizuje)
double TimeStart; // Čas, kde začíná lokální animace (když chci spouštět dokola jen část animace)
double TimeStop; // Čas, kde končí lokální animace
bool bLooping; // Zda se má animace pohybovat, nebo má stát. Pokud je false, poběží pořád animace v čase Time

int m_numVertices; // Počet vertexů
Vertex *m_pVertices; // Dynamické pole vertexů

int m_numTriangles; // Počet trojúhelníků
Triangle *m_pTriangles; // Dynamické pole trojúhelníků

int m_numMeshes; // Počet meshů
Mesh *m_pMeshes; // Dynamické pole meshů

int m_numMaterials; // Počet materiálů
Material *m_pMaterials; // Dynamické pole materiálů

int m_numJoints; // Počet kloubů kostry
Joint *m_pJoints; // Dynamické pole kloubů kostry

public:
Model(); //konstruktor
virtual ~Model(); //destruktor

bool Draw(); //vykreslí objekt
bool ReloadTextures(); //znovu načte textury pokud se mohly změnit nebo mohla být ztracena data

virtual bool LoadModelData()=0; //načítá data do proměnných definujících model objektu - nastavuje se v potomku, který načítá model objektu

void SetJointKeyframe( int i_joint_index, int i_keyframe_index, float f_time, float *pf_parameter, bool b_rotation );
void SetupJoints(); // Nastaví matice kloubů
void Animation(); // Animace modelu
void Restart(); // Restart animace

};
#endif // ndef MODEL_H


-ta asi není moc zásadní. Hlavní jsou ty struktury nahoře, do kterých se právě pomocí funkce LoadModelData() načítají informace.

Nechci sem vypisovat celou třídu ModelMilkshape::LoadModelData(), protože je hodně dlouhá a většina je nepodstatná. V soubou nejdříve includuji soubory:
#include <windows.h>		// Header File For Windows

#include <gl\gl.h> // Header File For The OpenGL32 Library

#include <fstream> //některé funkce pro načítání dat
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#include "ModelMilkshape.h"
#include "../Objekt.h"
. Potom definuji struktury MS3DHeader, MS3DVertex, MS3DTriangle a podobně pro načítání z binárního souboru .ms3d . Ve funkci načítám vertexy, rojúhelníky, meshe a tak. Problém nastane v části, která načítá Jointy (klouby kostry). Tady je ta část:

float f_anim_fps = *( float* )pPtr;		// Načti rychlost animace kostry

pPtr += sizeof( float ); // Posuň se v souboru na další hodnoty
pPtr += sizeof( float ); // Přeskoč hodnotu aktuálního času
int i_total_frames = *( int* )pPtr; // Načti počet snímků
pPtr += sizeof( int ); // Posuň se v souboru na další hodnoty
dTotalTime = i_total_frames*1000.0 / f_anim_fps; // Vypočítej délku animace
m_numJoints = *( word* )pPtr; // Načti počet kloubů
pPtr += sizeof( word ); // Posuň se v souboru na další hodnoty
m_pJoints = new Joint[m_numJoints]; // Alokuj paměť pro počet kloubů kostry modelu

struct TJointNameListRec // Vytvoř pomocnou strukturu pro načtení indexu a jména specifického kloubu
{
int i_joint_index; // Index kloubu
const char *pc_joint_name; // Jméno kloubu
};

const byte *pby_temp_load_data = pPtr; // Vytvoř další buffer pro načtení indexu a jména kloubu

TJointNameListRec *p_name_list = new TJointNameListRec[m_numJoints]; // Alokuj paměť pro počet indexů typu JoinNameRec
for ( i = 0; i < m_numJoints; i++ ) // Cykluj podle počtu kloubů
{
MS3DJoint *p_joint = ( MS3DJoint* )pby_temp_load_data; // Načti ze souboru hodnoty typu MS3DJoint
pby_temp_load_data += sizeof( MS3DJoint ); // Přeskoč hodnoty času sekundach
pby_temp_load_data += sizeof( MS3DKeyframe ) * ( p_joint->w_num_key_frames_rot + p_joint->w_num_key_frames_trans ); // Přeskoč hodnoty rotace a posunutí, které budem načítat později
p_name_list[i].i_joint_index = i; // Načti index kloubu
p_name_list[i].pc_joint_name = p_joint->pc_name; // Načti jméno kloubu
}

for ( i = 0; i < m_numJoints; i++ ) // Znova cykluj podle počtu kloubů
{
MS3DJoint *p_joint = ( MS3DJoint* )pPtr; // Znova načti ze souboru hodnoty typu MS3DJoint
pPtr += sizeof( MS3DJoint ); // Posuň se v souboru na další hodnoty

int i_parent_index = -1; // Rodičovský index nastav na -1
if ( strlen( p_joint->pc_parent_name ) > 0 ) // Jestliže jméno rodičovského kloubu existuje
{
for (int j = 0; j < m_numJoints; j++ ) // Cykluj opět podle počtu kloubů
{
if ( strcomp( p_name_list[j].pc_joint_name, p_joint->pc_parent_name ) == 0 ) // Pokud je jméno kloubu a jeho rodiče totožné
{
i_parent_index = p_name_list[j].i_joint_index; // Tak nastav stejný index rodiče a potomka
break; // A vyskoč z cyklu
}
}
if ( i_parent_index == -1 ) // Jestliže je rodičovský index -1, tak
{
MessageBox( NULL, "Unable to find parent bone in MS3D file", "Error", MB_OK | MB_ICONERROR ); // Vyhoď chybovou hlášku
return false; // A funkci předej false
}
}

memcpy( m_pJoints[i].pf_rotation, p_joint->pf_rotation, sizeof( float ) * 3 ); // Načti rotaci kloubu
memcpy( m_pJoints[i].pf_translation, p_joint->pf_translation, sizeof( float ) * 3 ); // Načti posun kloubu
m_pJoints[i].i_parent = i_parent_index; // Načti rodičovský index
m_pJoints[i].i_num_rotation_key_frames = p_joint->w_num_key_frames_rot; // Načti počet snímků rotace
m_pJoints[i].p_keyframe_rot = new Keyframe[p_joint->w_num_key_frames_rot]; // Alokuj paměť podle počtu snímků rotace modelu
m_pJoints[i].i_num_translation_key_frames = p_joint->w_num_key_frames_trans; // Načti počet snímků translace
m_pJoints[i].p_keyframe_trans = new Keyframe[p_joint->w_num_key_frames_trans]; // Alokuj paměť podle počtu snímků posunutí modelu

for ( int j = 0; j < p_joint->w_num_key_frames_rot; j++ ) // Cykluj podle počtu snímků rotace
{
MS3DKeyframe *p_key_frame = ( MS3DKeyframe* )pPtr; // Načti ze souboru hodnoty typu TMs3dKeyframe
pPtr += sizeof( MS3DKeyframe ); // Posuň se v souboru na další hodnoty
SetJointKeyframe( i, j, p_key_frame->f_time*1000.0f, p_key_frame->pf_parameter, true ); // Nastav hodnoty rotace kloubu
}

for ( int j = 0; j < p_joint->w_num_key_frames_trans; j++ ) // Cykluj podle počtu snímků translace
{
MS3DKeyframe *p_key_frame = ( MS3DKeyframe* )pPtr; // Načti ze souboru hodnoty typu TMs3dKeyframe
pPtr += sizeof( MS3DKeyframe ); // Posuň se v souboru na další hodnoty
SetJointKeyframe( i, j, p_key_frame->f_time * 1000.0f, p_key_frame->pf_parameter, false ); // Nastav hodnoty posunutí kloubu
}
}

delete[] p_name_list; // Vymaž buffer bufferu souboru (počel listů kloubu)

SetupJoints(); // Nastav matice rotace a translace kloubů


Je to přejatá část kódu, kterou úplně nechápu, ale celkem se mi řekl bych povedlo implementovat jí prozatimě do mého programu. Tady je začátek výpisu kompilátoru:
1>------ Build started: Project: Program, Configuration: Release Win32 ------

1>Compiling...
1>ModelMilkshape.cpp
1>.\Model\ModelMilkshape.cpp(216) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(74) : see declaration of 'strcpy'
1>.\Model\ModelMilkshape.cpp(264) : error C3861: 'strcomp': identifier not found
1>Objekty.cpp
1>.\Objekty.cpp(47) : error C2039: 'Draw' : is not a member of 'Objekt'
1> c:\_honza\programování\c++\programy visual studio\program\program\Objekt.h(5) : see declaration of 'Objekt'
1>.\Objekty.cpp(71) : error C2039: 'ReloadTextures' : is not a member of 'Objekt'
1> c:\_honza\programování\c++\programy visual studio\program\program\Objekt.h(5) : see declaration of 'Objekt'
1>.\Objekty.cpp(89) : error C2039: 'LoadModelData' : is not a member of 'Objekt'
1> c:\_honza\programování\c++\programy visual studio\program\program\Objekt.h(5) : see declaration of 'Objekt'
1>Model.cpp
1>.\Model.cpp(12) : error C2039: 'poloha' : is not a member of 'Model'
1> c:\_honza\programování\c++\programy visual studio\program\program\Model.h(7) : see declaration of 'Model'
1>.\Model.cpp(12) : error C2228: left of '.x' must have class/struct/union
1>.\Model.cpp(13) : error C2039: 'poloha' : is not a member of 'Model'
1> c:\_honza\programování\c++\programy visual studio\program\program\Model.h(7) : see declaration of 'Model'
1>.\Model.cpp(13) : error C2228: left of '.y' must have class/struct/union
1>.\Model.cpp(14) : error C2039: 'poloha' : is not a member of 'Model'
1> c:\_honza\programování\c++\programy visual studio\program\program\Model.h(7) : see declaration of 'Model'
1>.\Model.cpp(14) : error C2228: left of '.z' must have class/struct/union
1>.\Model.cpp(15) : error C2039: 'poloha' : is not a member of 'Model'


Errorů je hromada přes, stím bych neměl mít problémy. Už dlouho se ale trápím s řádkem
1>.\Model\ModelMilkshape.cpp(264) : error C3861: 'strcomp': identifier not found.

Máte někdo tušení, čím by to mohlo být a jak to vyřešit?
Děkuji mnohokrát za nápady

Tundra
C / C++ › Dynamické pole různých objektů
16. 11. 2009   #119298

No fakt síla. Dal jsem tam ten kód, co jsem tady vytvořil, chvilku jsem vylaďoval lehké chybky, pak jsem se modlil aby to vyšlo a ono to fakt FUNGUJE :smile18: :smile5: . Musím říct, že jsem to skutečně skoro ani nečekal, ale je to super.
Děkuji moc. Teď jdu dělat něco jako kamery, pak jdu na FPS... No bude to fakt zajímavý :smile1: .

Ještě jednou fakt díky.

Tundra
C / C++ › Dynamické pole různých objektů
16. 11. 2009   #119271

Já měl právě strach z toho, že by se mohl sám smazat ten objekt dřív, než bych chtěl já. Nebyl jsem si zcela jistý spolehlivostí pravidla "objekt vytvořený pomocí 'new' zanikne teprve, až když zanikne poslední reference na něj". Takže to jsem rád, že tady problém nejspíš nebude.

Tak já to zkusím dát do mýho programu a pak ti sem napíšu, jak to dopadlo. Nejspíš sem ještě přihodím tu metodu pro mazání objektů. Tam si ale ještě nejsem jistý, jak to udělat. Nejspíš asi prostě důkladně procyklímt všechny ty objekty a přeházím je aby šly pěkně za sebou bez mezer po vymazaných objektech.

No snad to klapne :smile1:

Tundra
C / C++ › Dynamické pole různých objektů
16. 11. 2009   #119269



class Objekty
{
struct seznam_objektu
{
Objekt *data[64];
seznam_objektu *dalsi;
};

seznam_objektu objekt;

bool CreateObject(Objekt *objekt_ptr)
{
objekt *a = &this->objekt;
while (a->dalsi)
{
a = a->dalsi;
}
int i=0;
while (a->data[i])
{
i++;
}
if (i=64)
{
a->dalsi=(seznam_objektu*) malloc(sizeof(seznam_objektu));
a->dalsi=new seznam_objektu;
a->dalsi->dalsi=NULL;
a->dalsi->data=objekt_ptr; //tady by se to mělo překopírovat
}
else
{
a->data[i]=objekt_ptr; //tady by se to mělo překopírovat
}
};
};


Teď by to mělo nějak fungovat.

Začíná mě už dost pálit - mám do toho a->data[i] kopírovat jen adresu předanou objekt_ptr nebo i všechna data? Viděl bych to radši na všechna data, aby mi nemohl ten objekt na adrese objekt_ptr zaniknout spolu s funkcí, která ho vytvořila. Nevím ale, jak pořádně na to...

Tundra
C / C++ › Dynamické pole různých objektů
16. 11. 2009   #119268

Ještě jsem si všiml pár chyb a zbytečně komplikovaných vyjádření.
Počkejte chvíli, ještě to předělám...

Tundra
C / C++ › Dynamické pole různých objektů
16. 11. 2009   #119267

Aha to je velmi zajmavé. Takže jsem ještě předělal tu třídu.



class Objekty
{
struct seznam_objektu
{
Objekt data;
seznam_objektu *dalsi;
};

seznam_objektu objekt[64];

bool CreateObject(Objekt *objekt_ptr)
{
objekt *a = this->objekt[0];
while (a->dalsi[0])
{
a = a->dalsi[0];
}
int i=0;
while (a->dalsi[i])
{
i++;
}
if (i=64)
{
a->dalsi[0]=(seznam_objektu*) malloc(sizeof(seznam_objektu)*64);
a->dalsi[0]=new seznam_objektu[64];
a->dalsi[0]->data=objekt_ptr; //tady by se to mělo překopírovat
}
else
{
a->dalsi[i]=objekt_ptr; //tady by se to mělo překopírovat
}
};
};



A teď už fakt nevim, jestli je tohle dobře, tak ať visim :D.

Jak se vám to líbí? Řekl bych, že tam bude pár chyb v přiřazování ukazatelů a objektů - je to dost složitý...

Tundra
C / C++ › Dynamické pole různých objektů
16. 11. 2009   #119263

Už začínám tušit. Než to začnu všechno zkoušet, byl bych vám vděčný, kdyby jste mi lehce prohlídnul kód, jestli je to to, co jste myslel.

Nějak takhle by vypadala třída Objekty:

class Objekty
{
struct objekt
{
Objekt data;
objekt dalsi;
};

bool CreateObject(Objekt *objekt_ptr)
{
objekt *a;
while (a->dalsi)
{
a = a->dalsi;
}
a->dalsi= (objekt*) malloc(sizeof(objekt));
//a->dalsi.data=objekt_ptr; - to je nejspíš špatně, tady by se zkopíroval objekt objekt_ptr do na volné místo v a->dalsi.data
};
};

Další funkce pro mazání a vypisování objektů by už měly být snadné.
Co si myslíte? Nenapadá vás rychle něco, jak zkopírovat snadno ten objekt?

Tundra
C / C++ › Dynamické pole různých objektů
16. 11. 2009   #119260

Aha, to zní zajímavě. Ty objekty mám už vytvořené a fungují přesně jak jsi říkal. Rozchodil jsem jich několik, ale vždycky jsem je vkládal jednotlivě jako globální proměnné.

Co přesně znamená ten spojitý seznam? Může prosím uvést příklad? Někde jsem četl o metodě, kdy se objekty vlastně "zřetězí". Každý objekt (instance) obsahuje ukazatel na následující objekt a tím se pak získává přístup kpostupně ke všem. To bych možná zvládnul, ale mám obavy, co by se dělo, kdybych chtěl přistoupit třeba k 50. objektu v řadě :D.

Co se týče přidávání a ubírání objektů - hodlám na začátku (nejspíš v konstruktoru třídy Objekty) vložit hromadu objektů a poté v průběhu programu občas přidat nebo odebrat nějaký objekt (na žádné masové změny, ale mělo by jít občas něco přidat nebo ubrat).

Tundra
C / C++ › Dynamické pole různých objektů
16. 11. 2009   #119253

Dobrý den, potřeboval bych poradit s jedním problémem. Už se to nějakou dobu snažím vyřešit, ale protože se jedná o věc, které nerozumím úplně do hloubky a která takovou znalost pro úspěšné vyřešení vyžaduje, rozhodl jsem se požádat vás o pomoc.

Dělám jakési 3D prostředí - hru nebo nějaký fyzikální simulátor, ještě přesně nevím. Mám vytořenou třídu Objekt a potom její potomky a potom potomky těch potomků. Ti druzí potomci reprezentují konkrétní objekty, které se v prostředí budou vyskytovat. Jsou to napřiklad různé krabice, světla, židle, stoly, postavy atd...

Mým cílem je zařídit, abych mohl kdykoliv z kterékoliv části programu vytvořit kterýkoliv z těchto objektů a uložit jeho adresu do nějakého pole obsahujícího všechny tyto objekty. K těm bych potom mohl přistupovat hromadně. Například bych je všechny najednou překreslil nebo najednou zastavil jakýkoliv pohyb.

Abych to vyřešil, vytvořil jsem si třídu Objekty, která by tohle všechno měla zvládat. Nevím ale přesně, jak bych to měl udělat. Moje myšlenka byla přibližně takováto:

Třída Objekty by obsahovala pole objekt[], jehož délka by se dynamicky měnila podle počtu objektů, které vytvářím a kté by buď přímo obsahovalo objekty, nebo by obsahovalo ukazatele na objekty. Pak by v třdě Objekty byla funkce CreateObject(Objekt *objekt_ptr), která by se volala si takhle: objekty.CreateObjekt(new Krabice). Udělala by to, že by zkopírovala předaný objekt do nějaké vlastní proměnné a adresu by potom uložila do pole objekt[].

Vůbec nevím, jestli by to takhle bylo správně ani přesně nevím, jak to udělat. vím že možností je tolik, že než bych to ozkoušel, trvalo by to dlouho a stejně bych a to nejspíš nepřišel. Goole jsem zkoušel dost dlouho.

Byl bych velmi vděčný, kdyby mi někdo pomohl.

Děkuji.

Tundra
Delphi › Cookies přes HTTP
7. 10. 2009   #116832

Tak protože jsem nezjistil jak na to, rozhodl jsem se, že mi bude muset postačit knihovna Synapse. Bohužel zde jsem také narazil na jeden problém. Normálně to všechno nastavim a odešlu a všechno je v pořádku až na to, že když si dám vypsat hlavičku, kterou mi poslal server, tak tam chybí poslední set-cookies. Jedná se o podobný problém jako který jsem měl dříve (viz přispěvek nahoře), ale tentokrát se mi vypíší 2 cookies a ta třetí mi chybí. Přitom vím jistě, že ve stránce, kterou načítám chyba není, protože normální internetový prohlížeč tuto cookies normálně načítá. Byl bych vděčný za jakoukoliv radu.
Děkuji.

Tundra
Delphi › Cookies přes HTTP
5. 10. 2009   #116764

Ahoj,
potřeboval bych poradit s používáním cookies v delphi. Umím se připojit k internetu a stáhnout nějaké soubory buď metodou GET nebo POST pomocí příkazů InternetConnect, HttpOpenRequest a HttpSendRequest. Vše funguje jak má a soubor se bez problémů stáhne. Data v POST se přenesou.
Tak jsem se pokusil nějak připojit cookies. Nejdříve jsem se pokoušel nastavi cookies a to pomocí příkazu HttpAddRequestHeaders. Tady je kód, který jsem sestrojil:

FTCookies:= 'Cookie: neco=1234; c=aab';
HttpAddRequestHeaders(
hConnect,
PChar(FTCookies),
length(FTCookies),
0
);

To bude možná správně, ale byl bych vděčný za kontrolu. Udělal jsem pár testů (ne stoprocentně průkazných), podle kterých se zdá, že to nefunguje. Mám obavy, jestli by neměla být proměnná FTCookies zakončena CRLF skupinou, ale nevím, jak se to dělá.

Další část byl pokus o čtení cookies. Použil jsem funkci HttpQueryInfo, konkrétně tento kód:

HttpQueryInfo(
hRequest,
HTTP_QUERY_RAW_HEADERS_CRLF,
CookiesBuf,
CookiesBufLen,
CookiesIndex
);

HTTP_QUERY_RAW_HEADERS_CRLF byl jediný parametr, který mi vyhodil nějaký použitelný výsledek:

HTTP/1.1 200 OK
Date: Mon 05 OCT 2009 14:56:09 GTM
Server: Apache/2.2.11 (Debian) PHP/5.2.9-4 with Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g
X-Powered-By: PHP /5.2.9-4
Cashe control: no-cache
Set-Cookie: platnost=1254765369
Content-Length: 6543
Connection: close
Content-Type: text/html

Zdálo by se, že vše funguje jak má a že stačí z textu vyextrahovat řádek Set-Cookie:, ale problém je v tom, že server má zde předávat ještě další 2 cookie ve formátu:
Set-Cookie: něco=346
Set-Cookie: něco_jineho=56787
Set-Cookie: platnost=1254765369
Jak je vidět, vypsalo se pouze poslední Set-Cookie.

Byl bych vám vděčný za jakoukoliv radu, jak z toho ven. Jen mi nepište, že mám použít nějakou free implementaci, která tohle zvládá sama. Všechny možné implementace jsem zkoušel a žádná mi zcela nevyhovuje a potřebuji jen vědět, jak na ty cookies.

Děkuji.

Jakub Dibala
Visual Basic › Nelze zavřít formulář
5. 4. 2009   #98553

Zdravím, právě tvořím offline prohlížeč našich stránek a zatím jsem si udělal Splash screen (úvodní okno) - formulář + progressbar + timer a hlavní formulář. Nastavil jsem Splash Screen tak aby až ProgressBar dojede do konce, otevře se hlavní formulář, vše funguje, ale jakmile dojede progress bar do konce, otevře se hlavní formulář a nejde zavřít (když ho zavřu, objeví se znovu). Mohli by jste mi poradit jak udělat, aby se normálně dal zavírat? Zde je zdroják:
Public Class Form1

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
ProgressBar1.Increment(1)
If ProgressBar1.Value = ProgressBar1.Maximum Then
frmMain.Show()
End If
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
End Class

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý