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

Anonymní profil Jura – Programujte.comAnonymní profil Jura – Programujte.com

 

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

Jura
C / C++ › Nefunguje našeptávání ve VC++
25. 8. 2010   #132986

Čau,

mně obvykle pomohlo vytvoření nového *.ncb souboru(smazat starý a vygenerovat nový - rebuild solution/projektu). Jinak ta "věc" se jmenuje IntelliSense, tak mužeš zkusit něco vygooglit. Případně se můžeš podívat na http://msdn.microsoft.com/en-us/library/ms235519(VS.80).aspx a http://msdn.microsoft.com/en-us/library/ks1ka3t6.aspx.

Jura
C / C++ › HWND jako int
19. 6. 2010   #130444

To liborb :
Tak například v mé implemtaci to je buď ukazatel na void nebo na nějakou strukturu(aby to bylo podle normy a kompilátor se s tím nějakymý způsobem vyrovnal).
Takže by se spíše hodilo vytvětlení, že tyto typu ve skutečností ukazují někam do paměti, tj. obsahují pouze adresu a ta je vyjádřena číslem. Každopádně pro použítí je znalost toho, co vůbec manipulátor je zač, je zbytečná

Jura
C / C++ › HWND jako int
19. 6. 2010   #130440

Čau,

když si uvědomíš, že HWND a jiné typy jsou ve skutečnosti jen ukazatele a co vlastně vůbec ukazatel je, tak do doby, co si kdekoliv a v jakékoliv formě budeš pamatovat adresu, kam ty původní ukazatele ukazovaly(a taky na co vlastně ukazovaly), tak výše zmíněné věci fungovat budou. Nicméně jediné správné použítí bych osobně viděl, jako většina ostatních, v podobě jáká se používá už léta.
Tedy ve stylu:

HWND hwnd; 

hwnd=FindWindow("notepad", NULL);
SendMessage(hwnd, WM_CLOSE, 0, 0);

Jura
C / C++ › aktivnost okna
9. 6. 2010   #129941
Jura
XML / XSL(T) › Teletext
8. 6. 2010   #129926

Zdravím,

problém bych v tom osobně neviděl. Stačí akorát stáhnout potřebné data(stránku) a ty pak zpracovat(parsovat). Navíc v případě ČT máš možnost stahovat přímo v textové podobě a pak by to parsování nemuselo být, tak složité(třeba je můžeš získat pomocí xslt nebo jakkoliv jinak). Nástřel máš, takže teď už jen zvolit technologie(jazyky), které chceš používat a podle toho se pustit do konkrétní implementace.

Jura
C / C++ › Templates - implementace fun…
8. 6. 2010   #129922

Zdravím,

opravdu to zadání znělo:

Naimplementujte vlastní šablonu ve stylu STL (např. vector), ale nepoužívejte přitom příkaz template.



Totiž nějak si to protiřečí. Jak máš vytvořit _šablonu_ bez použití klíčového slova template?
Pokud to opravdu znělo takto, tak to už samo o sobě něco vypovída o kvalitě učitele.

Jura
C / C++ › Efektivita iterátorů
10. 5. 2010   #128664

Zdravím,

vzhledem k tomu, že mě překvapily ty časy, tak jsem si příklad od Quiarka vyzkoušel na různých verzích visual studia. A musím říct, že mě docela překvapuje rozdíl mezi VSTS 2008 a VS 2010 Professional. Zde jsou výsledky(všechno release s /O2):

VC++ 6.0 Introductury Edition:
110.969
23.828
22.531

VSTS 2008:
26
69.578
6.172

VS 2010 Professional
11.875
6.125
6.156

Jura
C / C++ › template
2. 5. 2010   #128208

Zdravím,

namísto využití RTTI bych spíše zvážil specializaci tvé šablony přímo pro daný typ. Příklad:



template<class T>
class JanekOGL
{
// metody a atributy
};

// a pro int jen
template<>
class JanekOGL<int>; // bez tela



Tímto způsobem tě kompilátor seřve, když se budes snažit použít nedefinovaný typ.

Jura
C / C++ › template zlobi
25. 4. 2010   #127739

Zdravím,

kód jsem proletěl jen letmo, deklarace přátelských operátorů je ok(skutečně se píše operator+ <>(....)), nicméně co ti tam nejspíše chybí je dopředná deklarace těch přátelských funkcí. Zkus to podobne jako v tomto příkladě:



#include <iostream>

/////////////////////////////////////////////
// dopredne deklarace

template<typename T>
class MyClass;

template<typename T>
MyClass<T> operator+(const MyClass<T>& , const MyClass<T>& );

template<typename T>
std::ostream& operator<<(std::ostream& os, const MyClass<T>& );

/////////////////////////////////////////////
// definice

template<typename T>
class MyClass
{
public:
// typy
typedef T value_type;
friend MyClass operator+<>(const MyClass<T>&, const MyClass<T>& );
friend std::ostream& operator<< <>(std::ostream& os, const MyClass<T>& );

public:
// konstrukce / destrukce
MyClass()
{}

explicit MyClass(const value_type& value)
: value_(value)
{}

private:
// implementace
MyClass<T> DoSum(const MyClass<T>& other) const
{
// logika kopirovani
return MyClass<T>(value_ + other.value_);
}

private:
// atributy
value_type value_;
};

template<typename T>
MyClass<T> operator+(const MyClass<T>& a, const MyClass<T>& b)
{
return a.DoSum(b);
}

template<typename T>
std::ostream& operator<<(std::ostream& os, const MyClass<T>& arg)
{
return os << arg.value_;
}

int main()
{
MyClass<int> a(5), b(3), c;
c = a + b;
std::cout << c << std::endl;
return 0;
}


Jinak příště se snaž ten zdroják zkrátit na minimální problémovou část, pak by se v tom snad dalo lépe hledat a jaký kompilátor používaš.

Jura
C / C++ › Volá se operátor přiřazení r…
7. 2. 2010   #123733

Zdravím,

tak teď už je to jasné. Jak jsem psal výše, máš špatně navržené kopírování. Jde o to, že v případě, kdy neuvedeš svůj vlastní kopy konstruktor a operátor přiřazení, jej za tebe vygeneruje sám kompilátor. Jenže takhle předdefinované metody nemusí nutně dělat to, co očekáváš. Konkrétně v tvém případě jde ještě o to, že takto vygenrovaný operátor přiřazení není virtualní, tudíž kód:



zbran* p = new strelnazbran;
(*p) = (*this);
return p;


zavolá operátor přiřazení třídy,který je jeho levým operandem - tedy operátor třídy zbran. A právě díky tomu, že není virtuální se volá jen operátor bazové třídy. Nyní tě už asi samtoného napadá několik řešení, např.:
1) ve třídě zbran definovat vlastní virtualní operátor přiřazení a v potomcích pak přepisovat tento operátor(bacha na signaturu operatoru)
2) definovat normalní polymorfní třídu - kopírování povolit jen přes metodu klon(clone) a kopírování řídit volaním (chráněného) kopy konstruktoru.
3) atd...

Jura
C / C++ › Volá se operátor přiřazení r…
4. 2. 2010   #123617

Zdravím,

z tvého popisu příliš moudrý nejsem, ale tipoval bych, že máš nejspíše špatně logiku kopírování.



#include <exception>
#include <iostream>
#include <vector>

template <class T> class Obsluha {
public:
Obsluha(): p(0) { }

Obsluha(const Obsluha& s) : p(0) {
p = s->klon();
}

Obsluha& operator=(const Obsluha&);

~Obsluha() throw() {
delete p;
}

Obsluha(T* t): p(t) {}

operator bool() const { return ( 0 != p ); }
T& operator*() const;
T* operator->() const;

private:
T* p;
};


template <class T>
Obsluha<T>& Obsluha<T>::operator=(const Obsluha& pso)
{
if (&pso != this) {
delete p;
p = pso->klon();
}
return *this;
}

template <class T>
T& Obsluha<T>::operator*() const
{
if (p)
return *p;

throw std::runtime_error("Invalid pointer");
}

template <class T>
T* Obsluha<T>::operator->() const
{
if (p)
return p;

throw std::runtime_error("Invalid pointer");
}

class A
{
public:

A(int val)
: val_(val)
{}

virtual void printData(std::ostream& os) const {
os << "Tohle je trida A " << val_ << std::endl;
}

virtual A * klon() const {
return new A(*this);
}

protected:
A(const A& other) {
val_ = other.val_;
}

private:
// zakazano
A& operator=(const A& );

private:
int val_;
};

class B : public A
{
public:

B(double real, int val)
: A(val), real_(real)
{
}

virtual void printData(std::ostream& os) const {
os << "Tohle je trida B " << real_ << std::endl;
A::printData(os);
}

virtual A * klon() const {
return new B(*this);
}

protected:

B(const B& other)
: A(other)
{
real_ = other.real_;
}

private:
// zakazano
B& operator=(const B& );

private:
// atributy
double real_;
};

int main()
{
try
{
std::vector<Obsluha<A> > data;
for( int i = 0; i < 10; ++i ) {
Obsluha<A> p = ( i % 2 ) ? new A(i) : new B(i+0.5, i);
data.push_back(p);
}

data[1] = data[0];

for( int j = 0; j < data.size(); ++j ) {
data[j]->printData(std::cout);
std::cout << std::endl;
}


}
catch(std::exception& e) {
std::cerr << e.what();
}
return 0;
}

Jura
C / C++ › Priklad na urovni operacniho…
11. 1. 2010   #122575

Cau,

problem je ve volani funkce CreateThread a predani parametru hEvent. Jde o to, ze ty predavas adresu handle te eventy, jenze musis si uvedomit, ze promenna hEvent uz jako hodnotu obsahuje adresu, se kterou chces pracovat - to je vyznam HANDLE, je to vlastne ukazatel(mel by to byt typedef na void*). Takze kdyz to vytvoreni vlakna zavolas takto:



hThread = CreateThread(NULL,
0,
BigBearThreadProc,
hEvent, /*tady nepatri ampersand*/
0,
&dwThreadID);

Jeste k tem lokalnim promennym: Dej si pozor na jejich platnost, protoze kdyby jsi necekal na ukonceni pracovniho vlakna, tak by jsi ztratil odkazy na handle vlakna i eventy a uz bys je nemohl uvolnit.

Jura
C / C++ › Priklad na urovni operacniho…
10. 1. 2010   #122543

Zdravim,

v tvem kodu vidim par chyb:
1) hlavicka funkce neodpovida predpisu hlavicce, kterou by mela mit(ma vracet cislo)
2) nikde neuvolnujes prostredky(sice to uvolni system po ukonceni aplikace, ale takhle je to cesta do pekel)

tady je muj priklad pro inspiraci(snad to bude bez chyb:)):



#include <stdio.h>
#include <windows.h>

typedef struct _ThreadInfo
{
DWORD dwThreadID;
HANDLE hThread;
} ThreadInfo;

typedef struct _BigBearThreadData {

ThreadInfo info;
HANDLE hEvent;

} BigBearThreadData;


BigBearThreadData g_data = {0};

static DWORD WINAPI BigBearThreadProc(LPVOID lParam)
{
BigBearThreadData* pData= (BigBearThreadData*)lParam;
if( NULL != pData->hEvent ) {
// pockame na udalost, snad se nekdy dockame
const DWORD dwWaitResult = WaitForSingleObject(pData->hEvent, INFINITE);
if( WAIT_OBJECT_0 == dwWaitResult ) {
printf("Tak jsme se dockali\n");
}
else {
fprintf(stderr, "Neco se posralo pri cekani...");
}
}
printf("Vlakno konci\n");
return 0;
}

static void BigBearTest()
{
g_data.info.hThread
= CreateThread(NULL, 0, BigBearThreadProc, &g_data, 0, &g_data.info.dwThreadID);
g_data.hEvent
= CreateEvent(NULL, FALSE, FALSE, NULL);
if( NULL != g_data.info.hThread && NULL != g_data.hEvent ) {
// pockame cca 5 vterin
Sleep(5000);
// odpalime udalost
SetEvent(g_data.hEvent);
// pockame az vlakno dodela svoji praci
WaitForSingleObject(g_data.info.hThread, INFINITE);
}
// uklidime udalost
if( NULL != g_data.hEvent )
CloseHandle(g_data.hEvent);
// uklidime vlakno
if( NULL != g_data.info.hThread )
CloseHandle(g_data.info.hThread);
}

int main(int argc, char* argv[])
{
BigBearTest();
return 0;
}

Jura
Java › Zmena panelu po kliknuti na…
2. 1. 2010   #122069

Zdravim,

staci pouzit clenske promenne. Jinak pokud se snazis udelat vice takovych panelu pro ruzny stav aplikace, tzn. pokud se snazis udelat neco jako architekturu dokument/pohled nebo neco podobneho, tak pouziti panelu pro vetsi projekty neni moc dobre reseni. Pokud pouzivas NetBeans, tak ten tusim ma primo predchystane kostry pro desktopove aplikace a s vyzuzitim designeru, muzes tvorit aplikace mnohem rychleji.

import java.awt.event.*;

import javax.swing.*;

public class BigBearSample extends JFrame {

private JPanel firstPanel;
private JMenuBar firstMenu;

private JPanel secondPanel;
private JMenuBar secondMenu;

public BigBearSample() {
initComponents();
}

private void initComponents() {

init1stPanel();
init2ndPanel();

JPanel mainPanel = new JPanel();
mainPanel.add(firstPanel);
mainPanel.add(secondPanel);

getContentPane().add(mainPanel);
pack();
}

private void init1stPanel() {
firstPanel = new JPanel();
firstMenu = new JMenuBar();
JButton firstButton = new JButton("Druhy panel");

setJMenuBar(firstMenu);
firstPanel.add(firstButton);

firstMenu.add(new JMenuItem("Prvni"));
firstMenu.add(new JMenuItem("druhy"));

firstButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
on1stButton();
}
});
}

private void init2ndPanel() {
secondPanel = new JPanel();
secondMenu = new JMenuBar();
JButton secondButton = new JButton("Prvni panel");
JButton otherButton = new JButton("Dalsi tlacitko, at tam je neco navic");

secondPanel.add(secondButton);
secondPanel.add(otherButton);
secondPanel.setVisible(false);

secondMenu.add(new JMenuItem("Prvni"));
secondMenu.add(new JMenuItem("druhy"));
secondMenu.add(new JMenuItem("treti"));

secondButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
on2ndButton();
}
});
}


private void on1stButton() {
// vypne prvni panel
firstPanel.setVisible(false);

secondPanel.setVisible(true);
setJMenuBar(secondMenu);
}

private void on2ndButton() {
secondPanel.setVisible(false);

firstPanel.setVisible(true);
setJMenuBar(firstMenu);
}
}

Jura
C / C++ › GetOpenFileName() - navyseni…
13. 9. 2009   #115903

Zdravím,

to se težko dá posoudit, nicméně tohle je docela podivné:



ofn.lpstrFile = hwnd; // zde má být adresa pole, kde se ukládá výsledná cesta k vybranému souboru
ofn.lpstrFile[0] = '\0';

Jura
C / C++ › Definice šablonové třídy
9. 9. 2009   #115743

Zdravím,

pokud pracuješ se šablonami, tak je vhodné psát i implementaci do hlavičkového souboru.

Jura
PHP › Hodnotící algoritmus
6. 7. 2009   #111554
Jura
MySQL › pomoc s jednym query
28. 6. 2009   #111198

Čau,

neručím za správnost, ale na tohle se používá grupování, takže snad nějak takto:



SELECT user_uid, SUM(points) AS [Score]
FROM Nazev_tabulky
GROUP BY user_uid, round, month, year

Jura
Java › ArrayList&lt;Item&gt; vyhled…
28. 6. 2009   #111197

Zdravím,

na tom by snad nemělo být nic složitého - stačí projít kolekci a najit co potřebuješ. A aby se to dalo používat trochu univerzálněji, tak bys mohl použít generické typy. Tady je příklad, tak si z něj vypreparuj to podstatné:




package copyif;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;


public class Main {

interface Condition<T>
{
public boolean condition(T o);
}

public static class CollectionUtils
{
public static<T> void copyIf(final Collection<T> srcCollection,
Collection<T> destCollection,
final Condition<T> cond)
{
for( T o : srcCollection )
if( cond.condition(o) ) destCollection.add(o);
}
}

public static class Item
{
public String name;
public String surname;

public Item(String name, String surname)
{
this.name = name;
this.surname = surname;
}
}

public static void main(String[] args) {

ArrayList<Item> list = new ArrayList<Item>();
list.add(new Item("Pepa", "Dvorak"));
list.add(new Item("Pavel", "Novak"));
list.add(new Item("Petra", "Novakova"));
list.add(new Item("Jan", "Novak"));

ArrayList<Item> novaci = new ArrayList<Item>();
CollectionUtils.copyIf(list, novaci, new Condition<Item>() {
public boolean condition(Item o) {
return o.surname.equals("Novak");
}
});

// tisk
for(Item i: novaci)
System.out.println("Jmeno: " + i.name + " " + i.surname);
}
}

Anonymní uživatel
C / C++ › C++ a MAKEINTERSOURCE
27. 6. 2009   #111164

Zdravím,

z toho kousku kódu, co jsi sem napsal, se moc zjistit nedá. Jediné co vidím je, že kompilátor tě upozorňuje na neznámý identifikátor DIALOG1 a v resource máš DIALOG_1, takže buď ses tu jen přepsal, nebo změn MAKEINTRESOURCE(DIALOG1) na MAINTRESOURCE(DIALOG_1)(čemuž moc nevěřím, takže raději pošli ořezaný nefunčkní kód).

Jura
C / C++ › MFC - prosím o pár rad
24. 5. 2009   #101658

Zdravím,

neuvedl jsi zdrojáky, takže lze jen odhadovat. Pokud používáš double buffering, tak se ujisti, že v handleru zprávy WM_ERASEBKGND vracíš FALSE, čímž říkáš systému, aby nepřekřesloval pozadní View. Co se týká toho sledování kurzoru, tak předpokladám, že ten rezistor má nějaké své souřadnice levého horního vrcholu, takže pak:



// ten kod si jen vysmyslim, netusim jak to mas napsano
CElectricalElement * pSelected = getSelectedElement();
if( NULL != pSelected )
{
CPoint ptCurr = pSelected->getTopLeft(); // getTopLeft vraci horni bod vybrane soucastky
ptCurr = ptCursor - ptCurr; // ptCursor je souradnice mysi
pSelected->setTopLeft(ptCurr); // a nove nastaveni
}

No, snad to jde pochopit.

Jura
C / C++ › metoda const
24. 5. 2009   #101650

Zdravím,

ta možnost tu samozřejmě je, nicméně asi bych se pozastavil nad návrhem(pokud ovšem nemáš pevně dané rozhraní, které je blbě navržené). Ale abych jen neplácal, tak jedno z řešení je použít const_cast a odstranit modifikátor const, nebo deklarovat proměnnou, která má jít změnit, jako mutable. Jen znovu zopakuju, že obojí by se mělo používat s rozvahou.



class A
{
/*mutable*/ int a;
void mojeMetoda() const {
A * thisA = const_cast<A*>(this); // pripadne mutable a ten tenhle cirkus si odpustit
thisA->a = 5;
// ....
}
}

Jura
C / C++ › MFC návrh Ribbonu
5. 5. 2009   #100496

Teď se tak dívám, co to vůbec předáváš v tom druhém argumentu? Tam má být indetifikátor ikony v resource, ne cesta a jméno ikony. Čili tu ikonu nejprve přidej do resource svého projektu a pak jednoduše použij:



HICON hIcon = ::LoadIcon(::AfxGetInstance(), MAKEINTRESOURCE(IDI_TVE_IKONY));
// nebo lepe, kdyz uz to je MFC
HICON hIcon = ::AfxGetApp()->LoadIcon(IDI_TVE_IKONY);
ASSERT( hIcon );
if( hIcon )
{
// bla bla
}
else {
// zpracuj chybu
}

Jura
C / C++ › MFC návrh Ribbonu
4. 5. 2009   #100490

Zdravím,

zkoušet to nemůžu, protože nemám MFC Ribbon, nicméně vrací ti LaodIcon platný handle na ikonu?

Jura
C / C++ › Win 32 GUI -styling rôznych…
26. 4. 2009   #99957

Zdravím,

v podstatě jde jenom o to postarat se o kreslení controlu sám, tzn. zachytavát patřičné zprávy a správně na ně reagovat.
Velice dobrý tutoriál vycházel svého času na builder.cz. Zde máš konkrétně malou inspiraci, jak by to mohlo vypadat.
http://www.builder.cz/art/cpp/win_api_27.html

Jura
C / C++ › GDI objects
25. 4. 2009   #99865

Totiž EnableWindow ani SetDlgItemText určitě nevytváří žádné GDI objekty, takže tam chyba nebude. Takže pokud můžeš přibal celý projekt, nebo aspoň větší kus zdrojáku a třeba se někdo najde, kdo bude mít čas a chuť hledat GDI leaks.

Třeba pomůže:
http://msdn.microsoft.com/cs-cz/magazine/cc301756(en-us).aspx

Jura
C / C++ › GDI objects
25. 4. 2009   #99860

Zdravím,

tak ten kód jsem jen letmo proletěl, ale nezdá se mi, že by volaní EnableWindow, SetDlgItemText mělo vliv na nárust GDI objektů. Chybu bych na tvém místě hledal někde úplně jinde. Zkontroluj si jestli po každém GetDC voláš ReleaseDC a po BeginPaint zase EndPaint(jen v reakci na zprávu WM_PAINT). A jestli můžu doporučit, tak občas není odvěci si takovou funkčnost zabalit do třídy a využít výhod, které ti nabízí RAII . Samozřejmě to platí za předpokladu, že používáš C++.

Jura
.NET › Intro
20. 4. 2009   #99524
Jura
C / C++ › background u Win32 GUI
19. 4. 2009   #99458

Zdravím,

no já bych jen doplnil předchozí odpoveď. Pokud chceš změnit pozadí klientské oblasti okna, tak stačí nastavit proměnnou hbrBackground struktury WNDCLASS(EX) na požadadovanou hodnotu. Viz http://msdn.microsoft.com/en-us/library/ms633576(VS.85).aspx. Pak se o obsluhu obarvení nemusíš vubec starat.

Jura
C / C++ › statické pripojenie dllky...
21. 2. 2009   #95629

Pokud máš k dispozici importovací lib knihovnu a příslušný hlavičkový soubor, tak použij tz. implicitní linkování - includuj hlavičkovy soubor a přilinkuj knihovnu k projektu(každé prostředí to má jinak). Pokud nemáš libku, tak ti zbývá tzv. explicitní linkování - tedy využít funkce LoadLibrary, GetProcAddress a FreeLibrary, více o tom pohledej tady ve foru(nedávno se to tu probíralo). Případně: http://zezula.net/cz/prog/funkce_z_dll.html

Jura
C / C++ › import funkci
15. 2. 2009   #95053

Sice nejsem Adam, tak snad se nebude zlobit, ale chyba je jasna - linker nevi, kde ma najit definici funkce EloCancel. Tzn. musis prilinkovat *.lib k projektu, pak by to uz melo jit.

Jura
C / C++ › obousměrný seznam v C
2. 1. 2009   #93236

To Milan98 :

Malý přiklad jak uložit nějaké hodnoty do bin souboru. Není to nic světoborného - jedná se pouze o jednoduchou (de)serializaci, kde položky jsou rozlišeny jen polohou v souboru(nemají žádne jméno, atd), ale to bz ti přesto mělo stačit. Podobně to uděláš u těch struktur - nějakou funkci, která uloží/načte jednu strukturu (jednotlivé položky), pak dalsi funkci, která načte/uloží celý seznam, atd..

zde je kod testovací aplikace - je to jen test tak nekontroloju všechny návratové hodnoty.



#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <float.h>
#include <math.h>
#include <string.h>
#include "serializace.h"

#define MAX_TEXT 256

int main()
{
int iValue = 100, iValue2 = 0;
double dValue = 1.5, dValue2 = 0.0;
char szText[MAX_TEXT] = {0}, szText2[MAX_TEXT] = {0};

/*otevru pro zapis v bin. rezimu*/
FILE * pFile = fopen("test", "wb");
if( pFile )
{
strcpy(szText, "Tak co tu máme?");
/* Samozrejme bys mel testovat navratove hodnoty */
SaveIntToBinFile(pFile, iValue);
SaveDoubleToBinFile(pFile, dValue);
SaveStringToBinFile(pFile, szText);

fclose(pFile);
}
/* otevru pro cteni v bin rezimu */
pFile = fopen("test", "rb");
if( pFile )
{
LoadIntFromBinFile(pFile, &iValue2);
LoadDoubleFromBinFile(pFile, &dValue2);
LoadStringFromBinFile(pFile, szText2, MAX_TEXT);

/*overeni*/
assert( iValue == iValue2 && "Integer se nepovedlo nacist" );
assert( fabs(dValue - dValue2) < DBL_EPSILON && "Nepoveldo se nacist double" );
assert( 0 == strcmp(szText, szText2) && "Text se nepovedlo nacist" );

fclose(pFile);
}

return 0;
}


Jura
C / C++ › obousměrný seznam v C
2. 1. 2009   #93219

V žádném případě NEukládej strukturu jako celek. Zaděláš si s tím akorát na problémy. Jednak je zbytečné ukládat honoty ukazatelů a za druhé, struktury se obvykle nějakým způsobem zarovnávaji, tzn že sizeof(struktura) se nemusi nutně rovnat součtu velikostí položek struktury.

Jura
C / C++ › hromadný přístup k privtáním…
28. 12. 2008   #92819

Zdravím,

otázkou je, co je pro tebe spousta. Jinak vytvářet mamutí třídy není příliš dobrý nápad - zvláště pak zhlediska budoucího rozšiřování programu. Takže pokud ještě nemáš nic napsaného, tak se řádně rozmysli, jestli by se ta daná třída nedala rozdělit.

Jura
C / C++ › Zistiteľ né údaje...(C++)
12. 12. 2008   #91730

To malyChlapec :
Tyhle veci jsou specificke pro kazdy OS. Takze nejprve napis, pod jakym system pracujes a pak ti mozna nekdo pomuze vice.

Jura
Offtopic › Práce programátora
8. 12. 2008   #91413

Zdravím,

já jsem na tom podobně jako většina zatím zmíněných. Taky studuju na VŠ a přivydělávám si jako externista. Co se času týče, tak momentálně(blíží se termín odevzdání) musím pracovat dost, jak doma, tak ve firmě. A pokud jde o jazyk, tak je to C++ a pro GUI pod windows používám framework MFC, nicméně si občas přičichnu k COM technologii(ale jen okrajově).

Jura
C / C++ › nacitani hodnot v cyklu..
10. 11. 2008   #89477

http://programujte.com/index.php?akce=diskuze&kam=vlakno&tema=10875-osetreni-vstupu
neco z tech reseni si vyber..ale pochybuju, ze je to jednodussi

Jura
C / C++ › nacitani hodnot v cyklu..
10. 11. 2008   #89471

Tak po precteni dokumentace, musim konstatovat, ze jsem tam nasekal dost chyb. Takze ted snad OK



char szLine[50] = {0};
while( fgets(szLine, 50, stdin) )
{
char *pErr = 0;
double dValue = strtod(szLine, &pErr); // nebo long a strtol
if( pErr && *pErr )
{
// chyba
}
else
{
// vstup je ok
}
}

Jura
C / C++ › nacitani hodnot v cyklu..
10. 11. 2008   #89469

Netestovano



char szLine[50] = {0};
while( fgets(stdin, 50, szLine) )
{
char *pErr = 0;
double dValue = strtod(szLine, pErr); // nebo long a strtol
if( pErr && *pErr )
{
// chyba
}
else
{
// vstup je ok
}
}

Jura
C / C++ › Ošetření vstupu
4. 11. 2008   #89090

To Romi :
Sorry, máš pravdu, špatně jsem si to v dokumentaci přečetl. Akorát jsem tvé předchozí řešení nečetl. Pak to samozřejmě fungovat bude, máš pravdu. Jenže oba naše řešení ztroskotají např. na vstupu 45er8(chtěl jsem zadat jen 45e8) - pak je to jasná chyba, bohužel moje řešení přečte pouze 45 a tvé jak 45, tak 8 (kvůli tomu očekávaní \n), ale to plyne z chovaní scanf. Takže pokud chce opravdu mít kontrolu nad vstupem, tak asi scanf nabude to správné řešení. Pak bych se přikláněl k tomu, co zde zmiňoval KIIV tedy načíst do řetězce a ten pak konvertovat(raději pomocí strtod).

Jura
C / C++ › Ošetření vstupu
4. 11. 2008   #89084

Jen si je dobré uvědomit, jak funguje scanf - bere znaky jen po první bílý znak, mezi které patri i '\n', který přečte a pak zahodí, takže na něj reagovat ve smyčce neni příliš vhodný nápad.



#include <stdio.h>
//#include <locale.h> // setlocale

#define MAX_BUF 256

void func(double dNum)
{
printf("%.2lf ^ 2 = %.2lf\n", dNum , dNum*dNum );
}

int main()
{
//setlocale(LC_ALL, "");
double dNum = 0;
int iCount = 0;
while( (iCount = scanf(" %lf", &dNum)) != EOF )
{
if( iCount > 0)
func(dNum);
else
{
clearerr(stdin);
fprintf(stderr, "Bad input\n");

}
fflush(stdin);
}
//setlocale(LC_ALL, "English");

getchar();
return 0;
}

Jura
C / C++ › Výběr proměnné podle hodnoty
3. 11. 2008   #89013

Já jsem celkem líný člověk, takže bych šel na to třeba takto(pravda neni to příliš efektivni, nicméně méně pracné):-):



#include <iostream>
#include <algorithm>

int main()
{
int a[3];
std::cin >> a[0] >> a[1] >> a[2];
std::sort(a, a + 3);
std::cout << a[1];
return 0;
}

Jura
C / C++ › fmod.. divne chovani??
30. 10. 2008   #88738

No, podle mého nazoru máš celkem smůlu. A žádná úprava v hlavičkovém souboru ti neumožní zvetšit rozsah double. Jinak co se týče přesnosti, tak je, tuším, platných pouze prvních 15 číslic, zbytek je nějaké smetí. Nicmeně to nevím přesně a hledat to nebudu, ale můžeš si to najít ve standardu.

Jura
C / C++ › Správné ošetření čísla
28. 10. 2008   #88618



#include <iostream>
#include <cstdlib>
#include <exception>


double GetDouble(const char *strNumber) throw(std::runtime_error)
{
char *pErr = 0;
// fce strtod pouzije pErr k iteraci stringem
// a pokud dojde k chy pErr ukazuje na misto kde
// ve stringu uz nejsou cisla, pokud je
// vse OK pErr MUSI ukazovat na konec retezce tedy
// na znak '\0'
double dValue = ::strtod(strNumber, &pErr);

// test zda-li nedoslo k chybe
if( pErr && *pErr )
throw std::runtime_error("Neni cislo");

return dValue;
}


int main()
{
// Test
static const char* szTestArray[] =
{
"123456.56",
"er12345.cosi",
"124er.56",
"12345.78uiyk"
};

int iCount = sizeof(szTestArray) / sizeof(szTestArray[0]); // OK pole pointeru

for( int i = 0; i < iCount; ++i )
{
try
{
double dNum = GetDouble(szTestArray[i]);
std::cout << "Uspesna konverze: " << dNum << std::endl;
}
catch(const std::exception& e)
{
std::cerr << e.what() << std::endl;
}
}

return 0;
}



jinak http://www.linuxsoft.cz/article.php?id_article=590

Jura
C / C++ › Správné ošetření čísla
28. 10. 2008   #88569

To cp.Hook :

Pouzij funkci strtod, ta ti umozni detekovat, jestli se retezec povedlo uspesne prekonvertovat na cislo.
http://www.cplusplus.com/reference/clibrary/cstdlib/strtod.html

Jura
C / C++ › 2x break
26. 10. 2008   #88403

Zdravím,

prikaz break vzdy vyskoci jen z jednoho cyklu, takze pokud mas nekolik zadnorenych cyklu, tak to pomoci jendoho break nepujde. Ale v podstate mas vice moznosti
1) pouzit, nekterymi odsouzeny prikaz goto
2) rozdelit to do funkci
3) nastavit nejaky flag, ze se nema v cyklu jiz pokracovat
napr:




for( int i = 0; i < n ; ++i )
{
bool bLoop = true; // nebo to dat jeste nad vnejsi for
for( int j = i; j < n ; ++j)
{
if( a[j] == x )
{ bLoop = false;
break;
}
}

/* pokud tu je jeste nejaky kod tak testovat bLoop
if( !bLoop )
break; */
}

nebo nejak podobne - jde jen o to neco nastavi a pak to vhodne testovat

Jura
C / C++ › WinAPI Keystrokes
26. 10. 2008   #88391

Zdravim,

jde to treba takto..



#include <iostream>
#include <windows.h>

static const char* g_szCalcClassName = "SciCalc";

int main()
{
// ziskam nejakym zpusobem HWND aplikace, ktere
// chci poslat zpravu
// ja si pomoci programu Spy++ zjistil
// jmeno tridy aplikace

HWND hWnd = ::FindWindow(g_szCalcClassName, 0);
if( hWnd )
{
// nasel jsem aplikaci
// a poslu tam cislo 120

::PostMessage(hWnd, WM_KEYDOWN, VK_NUMPAD1, 0);
::PostMessage(hWnd, WM_KEYDOWN, VK_NUMPAD2, 0);
::PostMessage(hWnd, WM_KEYDOWN, VK_NUMPAD0, 0);
}
else
{
std::cerr << "Nemuzu najit kalkulacku";
}
return 0;
}

Jura
C / C++ › Metasoubory
16. 9. 2008   #85271

Zdravim,

koukam, ze se to tu nejak rozrostlo. No a co se tyka typu haku, tak pokud chces zachytavat i cizi procesy, tak nejlepsi bude asi pouziti globalniho haku(v DLL). Mozna by ti pomohl clanek pana Radka Chalupy

http://www.radekchalupa.cz/clanky/?kod=205&obsah=48

a

ttp://www.radekchalupa.cz/clanky/?kod=205&obsah=47

Jura
C / C++ › Metasoubory
7. 9. 2008   #84720

To MaS :

Zdravím,

pokud ti jde o to minimalizovat ikonu do traye, tak se koukni zde:

http://www.builder.cz/art/cpp/win_api_24.html

Jura
Delphi › Proč nefunguje BlockRead?
25. 8. 2008   #83593

Zdravím,

pokud ti jde pouze o kopírování a nepotřebuješ nijak dále s tím souborem pracovat, tak se nabizí využití Win API fce CopyFile.
http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx

Jura
C / C++ › Problém - typy
17. 8. 2008   #83029

To crAzY^ :

Definuj hodně nepřesný. Jde o to, že reálná čísla mají v PC omezenou přesnot. Jak velkou tu přesnot potřebuješ? pokud ti nevyhovuje tak zkus long double(ale pozor, může mít stejný počet platných číslic jako klasický double), a pokud ani to ne, tak nějakou knihovnu na počítání s velkými čísly. Případně napiš jaké vypočty provádíš?

Jura
C / C++ › Problém - typy
17. 8. 2008   #83024

To crAzY^ :

Zdravím,

to že ti vrací jen 6 číslic zjišťuješ jak? Výpisem do konzole? Pokud ano, tak se na ta čísla koukni přes debugger, pak nebudou mít 6 číslic. Výpisy jsou zaokrouhleny, ale pokud přesto chceš vidět i ostatní destinná místa, tak pak to lze udlět třeba takto:



printf("%.8f", dMojeCisloNaOsmDesetinnychMist);


V C++ je to tu někde na foru taky popsáno. Ale bacha ty čísla nejsou nekonečná;)

Jura
C / C++ › Kontejner, ukazael a auto_ptr
12. 8. 2008   #82699

Zdravím,

buď si napíšu nějaký wrapper, kterým obalím standartní vector(nelze od něj dědit, protože nemá virtuální destruktor!!! ) , překryju všechny potřebné metody a navíc o dealokaci se postarám sám v destruktoru. Nebo použiju inteligentní ukazatele s čítačem referencí. Jen musí být napsán inteligentně, pokud budu pracovat s více vlákny.

Jura
C / C++ › export xls, alebo OpenOffice…
12. 8. 2008   #82694

To asdf :
Huh, tak to ti nepovím, nicméně já to používám v práci na XML, ale to bude nejspíše něco jiného. Zkus napsat na forum microsoftu, tam ti jiste poradí.

http://forums.microsoft.com/msdn-cs/default.aspx?siteid=39

Jura
C / C++ › Uvolnovani pameti
11. 8. 2008   #82576

Zdravím,

nejprve všechny prvky pole inicializuj na NULL(terba pomoci memset) a pak už je můžeš vesele mazat přes delete, protože je zaručeno, že delete NULL neudělá nic. Nicméně pokud ti to nějak pomůže, tak si před delte můžeš dát podmínku:



for(kazdy prvek v poli)
if( pole[i] != NULL )
{
delete pole[i];
// pole[i] = NULL; <-- v pripade, ze pointer budes pouzivat i pote.
}

Jura
C / C++ › Nahodna cisla
10. 8. 2008   #82509

Jo a ještě otázka: Chová se to stejně i v release verzi?

Jura
C / C++ › Nahodna cisla
10. 8. 2008   #82505

Zdravím,

je zajímavé, že time vrací pořád nulu, ale každopádně z toho popisu a úryvku kódu těžko někdo pozná, co je špatně.

Jura
C / C++ › pristup k registrom
6. 8. 2008   #82137

To Pali :

ad 1)

Co se týče zápisu klíče registru, tak to je naprosto blbě - znak \ uvozuje escape sekvence. A jinak na tuhle činnost má WinAPI určeny funkce.

ad 2) To je jenom dobře, i když kdybys sis uvědomil, co děláš, tak bys na to možná přišel.

Jura
C / C++ › export xls, alebo OpenOffice…
5. 8. 2008   #82045

No, tak jsem ti napsal malý příklad:



// Include standard header files
#include <iostream>
#include <cmath>
#include <tchar.h>
#include <ctime>

// tu cestu si samozrejme zmen jak potrebujes
#import \
"C:\Program Files\Common Files\Microsoft Shared\OFFICE10\mso.dll" \
rename("DocumentProperties", "DocumentPropertiesXL") \
rename("RGB", "RBGXL")

#import \
"C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\vbe6ext.olb"

#import "C:\Program Files\Microsoft Office\OFFICE10\EXCEL.EXE" \
rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \
rename("DocumentProperties", "DocumentPropertiesXL") \
rename("ReplaceText", "ReplaceTextXL") \
rename("CopyFile", "CopyFileXL") \
exclude("IFont", "IPicture") no_dual_interfaces


int main(int argc, char *argv[])
{
srand(time(0));
CoInitialize(NULL);
try
{
Excel::_ApplicationPtr excel; // ukazatel na tridu aplikace Excel

excel.CreateInstance(_T("Excel.Application")); // vytvoreni instance

// zobrazim excel - samozrejme nemusim
// ale chcu videt vysledek
excel->Visible = true;

// vytvori novy "projekt"
// pokud chcu otevrit stavajici soubor
// pouziju metodu Open (necekane)
Excel::_WorkbookPtr workbook = excel->Workbooks->Add(static_cast<long>(Excel::xlWorksheet));

// ziska aktivni list
// v excel->Sheets->Item jsou ulozeny
// odkazy na jednotlive listy
// tzn. v excel->Sheets->Item[1L]
// je prvni list( indexovano od jednicky)
Excel::_WorksheetPtr pSheet = excel->ActiveSheet;

//ziskam pointer na bunky v aktivnim listu
Excel::RangePtr pRange = pSheet->Cells;

// pojmenuju list
pSheet->Name = _T("Muj list");
// zapisu do bunky A1 retezec X
// pozor indexuje se od 1
// a jsou dulezite ty postfixy L
// Items akceptuje pouze long,
// tedy aspon u mne
pRange->Item[1L][1L] = _T("X");
pRange->Item[1L][2L] = _T("Y");

// zapisu tam nejake data
for( long lRow = 2L; lRow < 10; ++lRow )
{
pRange->Item[lRow][1L] = long(lRow-1);
pRange->Item[lRow][2L] = double(rand()%1000)/100;
}

// ted bych treba mohl vytvorit novy list
// a v nem graf, nicmene je to moc prace
// a ty ses ptal pouze na ukladani


// ulozim
pSheet->SaveAs(_T("pokus.xls"));

// ukoncim excel
excel->Quit();

}
catch(_com_error& e)
{
// nejake osetreni chyby
_bstr_t strErrMsg = e.Description();
return 1;
}

CoUninitialize();
return 0;
}

Jura
C / C++ › export xls, alebo OpenOffice…
5. 8. 2008   #82000

zdravím,

mělo by to jít pomocí COM. Ale teď jsem líný hledat nějaké solidní příklady, tak zkus něco vygooglit,nebo můžeš zkusit pohledat na codeproject.com a codeguru.com

Jura
C / C++ › Nacitanie objektu z DLL
4. 8. 2008   #81849

Takže ještě jednou. Dll knihovny lze připojit k programu dvěma způsoby:

1) Implicitní připojení
2) explicitní připojení

Implicitní připojení

K tomu abych mohl použít Implicitní připojení musím mít k dispozici k *.dll příslušný *.lib a *.h soubor. *.h obsahuje všechny deklarace fcí a tříd a lib obsahuje jen odkazy na implementaci do *.dll .
Postup práce s knihovnou je pak jednoduchý:
1) přilinkuju *.lib soubor k projektu
2) includuju *.h soubor
3) pracuju s funkcemi naprosto normálně - nepoužívam GetProcAddress

explicitní připojení
Tento typ se obvykle používá, když nemám k dispozici *.lib a *.h soubor. Funkce se vyhledávají právě pomocí GetProcAddress - bohužel nejde načítat TŘÍDY.

Takže pokud máš k dispozici *.lib a *.h soubor k té knihovně, tak se vyser na GetProcAdress. Pokud nemáš a psal jsi ji sám, tak si nech kompilátorem vygenerovat příslušné *.lib a *.h soubory. A pokud jsi autorem knihovny a z nějakého důvodu nechceš uvolňovat *.lib a *.h soubor, tak napiš a pak se pokusím ti poradit dále.

Jura
C / C++ › Nacitanie objektu z DLL
4. 8. 2008   #81847

zdravím,

pokud těmi objekty myslíš třídy, tak to máš bohužel smůlu protože dynamicky přes(GetProcAddres) tříy nelze načítat. Lze to sice obejít, tak že budeš vracet pointer na nějaký objekt vytvořený pomocí new v knihovně přes nějakou tebou definovanou funkcí, ale asi s tím budou akorát problémy, protože jej budeš muset uvolnit zase nějakou funkci knihovny(je to kvůli tomu, že pointery alokovány v knihovně nelze mazat přes delete/free volaném ve tvém klientském programu - nejedná se totiž o pointry pochazející z lokálního heapu). Mnohem lepší je použít příslušný *.lib a *.h soubor a kompleně se vysrat na GetProcAddress.

Jura
C / C++ › ODBC v C++
3. 8. 2008   #81807

To plantaznik :

Tak s tím connection stringem ti neporadím, zkus nějaký z těch stránek. A co se týče metody Open, tak letmým pohledem do zdrojáků zjistíš, že jeden z těch argumentů je heslo a druhé uživatel.

Jura
C / C++ › ODBC v C++
3. 8. 2008   #81781

To planataznik :

Tak to nevím, já používam VC++ 6.0. Založ si projekt typu Win32 console application a zkus ten příklad zkompilovat, jestli to půjde tak máš vyhráno. A co se týče těch příkladů, tak ty už nemám :-(, ale nějaké info o ADO najdeš na codeguru.com. Kdyžtak zkusím něco napsat. Aspoň malý příklad.

Jura
C / C++ › ODBC v C++
3. 8. 2008   #81774

Zdravím,

můžeš zkusit ADO. Nějaké příklady najdeš na
http://www.codersource.net/mfc_ado_select.html

ale nejspíše budeš mít problémy s connection stringem. Někde v PC jsem měl na to příklad - zkusím to dohledat, pokud najdu postnu to sem.

Jura
C / C++ › fgets
1. 8. 2008   #81660

http://www.cppreference.com/cppstring/getline.html

případně

http://www.cppreference.com/cppio/getline.html

Jura
C / C++ › otvorenie programu
30. 7. 2008   #81436

To crutcher :

No, obecně konzolové programy nemá přiliš smysl spouštět jinak než přes příkazový řádek, takže v něm uvidíš výstup programu i po jeho skončení. Nicméně často narazíš na takovou "vychytávku" jako je napsaní cin.get() nebo system("pause") apod. před return ve funkci main. Pokud to spouštíš přes debugger, tak si jednoduše na return ve fci main dej breakpoint. Nebo přejdi na jiné prostředí, tuším že CodeBlocks umožňuje po ukončení programu "potlačit" zavření konzole a vypisuje tam nějaké údaje(doba běhu programu, atd. )

Jura
C / C++ › C++ a SDL - nejde zkompilovat
27. 7. 2008   #81053

No, takhle se to těžko odhaduje, nicméně ujisti se, že máš u VŠECH potomků dopsány implmentace všech čistě virtuálních metod a taky tam nikde nevidím, že bys definoval virtuální destruktory - což je taky důležíté - kompilátor je tuším sám negeneruje.

Jura
C / C++ › C++ a SDL - nejde zkompilovat
27. 7. 2008   #81002

To Taine :

No,tak jsem vygooglil nějaký návod, ješě to zkus podle něj:
http://gpwiki.org/index.php/SDL:Tutorials:Setup#Windows:_MinGW

Jura
C / C++ › C++ a SDL - nejde zkompilovat
27. 7. 2008   #80982

Zdravím,

jsi si jistý, že máš přilinkované všechny potřebné knihovny? Konkrétněji libSDLmain.a?

Jura
C / C++ › Program s přijímáním dat z i…
26. 7. 2008   #80968

A co se týče toho stažení, tak pokud pracuješ pod Windows, tak stačí použít WinAPI funkci URLDownloadToFile - více informací poskytne google, ovšem osobně s tím zkušenost nemám. A pakliže nepracuješ pod Windows...tak na to ti odpoví někdo jiný:).

Jura
C / C++ › Program s přijímáním dat z i…
26. 7. 2008   #80967

Zdravím,

no kód jsem nestudoval, takže netuším, co v tam máš. Nicméně přikládám ukázku použití lokalizace pro vstup a výstup.



#include <iostream>
#include <limits>
#include <locale>
#include <cassert>

using namespace std;

int main(int argc, char* argv[])
{
locale origin( "" ); // vytvori localizaci podle OS

cin.imbue( origin ); // nastavi ji pro vstup
cout.imbue( origin ); // to same pro vystup

assert( cin.getloc() == origin && " nepovedlo se nastavit locale pro vstup" );
assert( cout.getloc() == origin && " nepovedlo se nastavit locale pro vystup" );

cout << "Zadej cislo: ";

double dValue = 0.0;
while( !( cin >> dValue ) ) // dokud se zadavaji ptakoviny
{
cerr << "Zadal jsi kravinu!!\n"
<< "Zkus to znova\n";

cin.clear( ); // zrusi oznaceni chyby ve vstupu, diky tomu zase muze cist
cin.ignore(numeric_limits<streamsize>::max( ), '\n'); // preskoci vsechn znaky,ktere jsou ve streamu
}

cout << dValue; // vypise hodnotu
return 0;
}

Jura
C / C++ › Promena
21. 7. 2008   #80390

To Zelenáč :

Presne jak pise Matrix17. Ver mi, ze az budes odladovat problemy s pameti na rozsahlych projektech, tak tohle zacnes pouzivat, hlavne tam kde budes mit pole pointeru, atd. Co se tyce toho prikladu, tak jsem to pouzil proto, ze jsem tam misto tech tecek puvodne napsal strncpy. Jinak by to mohlo byt napsano klidne takto:



char jmeno[20] = {0};

coz udela to same a nevola se zadna fce, jen to moc lidi nezna.

Jura
C / C++ › Promena
20. 7. 2008   #80327

Oprava:
memset(&jmeno, 0, sizeof(jmeno));

Jura
C / C++ › Promena
20. 7. 2008   #80325



char jmeno[20];
memset(jmeno, 0, sizeof(jmeno));
.....
if( 0 == strcmp("dc195", jmeno) )
{
// jsou stejne
}
else
{
// nejsou
}

Jura
C / C++ › C++ a OpenGL - (re)kompilace…
20. 7. 2008   #80220

To survik1 :

Nesmysl to rozhodně není. Skutečně se jedná o klasickou aplikaci. Jen s tím rozdílem, že když systém spouští screensaver, tak mu předá speciální parametry, na které spořič reaguje(např. spuštení ve fullscreenu, náhled,případně otevřeni dialogu pro nastavení, atd.)

Jura
C / C++ › XML v Borland Turbo C++
9. 7. 2008   #79127

A jaké máš požadavky? Resp. jen mám obavy, aby sis s použitím MSXML nepřidělal více práce než užitku(postahovat SDK, naučit se základní práci s COM, atd.). Takže pokud nebudeš používat v XML DOCTYPE, tak bych asi šáhnul po tom TinyXML. Tady je malá ukázka toho, jak se s tím pracuje http://www.grinninglizard.com/tinyxmldocs/tutorial0.html a pokud chceš dohledat něco ohledně MSXML tak se koukni na codeproject.com a codeguru.com. Jinak před nějakou dobou, zde na programujte.com publikoval sn3d článek použití Expat, ale mám dojem že to jen parser, takže to můžeš zkusit dohledat.

Jura
C / C++ › XML v Borland Turbo C++
9. 7. 2008   #79121

Zdravím,

vzhledem k tomu, že používám MSXML a neznám podporu COM objektů v Turbo C++, tak ti jej doporučit příliš nemůžu. Nicméně je ti jeden OpenSource projek jménem TinyXML obsahuje sice jen základní funkce, nicméně podle samplů práce s ní je poměrně jednoduchá. Zde je více infa: http://www.grinninglizard.com/tinyxml/index.html

Jura
C / C++ › Oddělení aplikační a prezenč…
30. 6. 2008   #78482

Zdravím,

no, tak já pro změnu v práci dělám s MFC, což není uplně přesně MVC architektura, ale jen framewok používaící Document-View architekturu. Nciméně kdysi dávno jsem taky hledal něco obecného, bohužel nic příliš dobrého jsem nenašel. Nějakou zmíňku najdeš třeba http://www.adobe.com/devnet/actionscript/articles/ora_as3_design_patterns.html - dole je odkaz na kapitolu knížky, která se tak trochu zabývá i MVC a dále další zdroj(nevím jak seš na tom s C++ a WinAPI, ale to by nemělo vadit) je např. http://relisoft.com/win32/generic.html, moc v tom nenajdeš, ale princip se dá pochytit. Pokud bys taky něco našel, tak dej vědět.

Jura
C / C++ › prosím o radu s SQLite
28. 6. 2008   #78348

Sám osobně s tím nemám zkušenosti, ale snad to může:

http://www.sqlite.org/quickstart.html
http://web.utk.edu/~jplyon/sqlite/

Jura
C / C++ › Callback funkce s parametry
28. 6. 2008   #78347

zdavím,

funkce GenerateWorldSetAbortCallback() musí mít ještě argument, který při volání předáš callback funkci . Tím argumentem může být třeba pointer na void, který si ve funkci FreeHeightMap případně přetypuješ(jestli bude potřeba) a uděláš, co potřebuješ.

Jura
C / C++ › jednoducha otazocka okolo re…
29. 5. 2008   #75374

Ano. Případně pokud pracuješ v C++, tak dej raději přednost třídě std::string, ta už se o alokaci a dealokaci postará sama a mimojiné má řádu užitečných metod. Tím si ušetříš dost trápení.

Jura
C / C++ › jednoducha otazocka okolo re…
29. 5. 2008   #75365

Musíš alokovat. Zatím to je jen náhoda, že to nepadalo, jednou spadne. Jde o to, že ukazatel musí někde ukazovat, přesněji že ty musíš vědět, na co má ukazovat. Teď ti to ukazuje někam do paměti, bohužel nevíš kam.

Jura
C / C++ › Dislin v C
27. 5. 2008   #75130

Zde jsem ti vytvořil ukázkový přiklad na kreslení grafu. Je to napsáno ve WinAPI a taky je to napsáno tak, jak by se to rozhodně psát nemělo :). Vykresluje se jen první kvadrant, ale jako ukázka, že to jde poměrně jendoduše i ve vin api to staci. Umí to pouze jeden graf, ale s urcitou modifikaci si s tim poradis i jako zacatecnik. Jelikoz programuju jen v MFC, tak jsem kod postavil na zaklade kodu pana Radka Chalupy. Jen aby sis to mohl otestovat, tak si zaloz projekt typu Win 32 Application. Jinak na vystupu by melo jit videt neco jako graf druhe odmocniny. Nacteni souboru snad uz zvldanes sam.

Jura
C / C++ › Dislin v C
27. 5. 2008   #75103

Tím zakomponovat myslíš nakreslit na výstup nebo uložit jako obrázek? Pokud ti stačí vykreslení, tak si prostě spočítej nějaké body(třeba závislost casu na vzdálenosti), napln tím pole a dál už jsou to jen kreslící rutiny. Bohužel ty jsou závislé na použitém OS. Takže zkus ještě nějak blíže specifikovat pojem zakomponovat(vykreslit, uložit nebo cokoliv jiného), dále pak pro jaký OS to je. Pak ti jistě někdo odpoví lépe.

Jura
C / C++ › cin.get() cin.line()
24. 5. 2008   #74847
Jura
Java › Prace se soubory
21. 5. 2008   #74552

Je možné, že jsem si to přebral nějak jinak, než to bylo původně myšleno. Pro případ, že chceš spouštět externí aplikace:
[url]
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
[/url]

Pokud ti jde o načítání souborů, tak se koukni na třídy FileInputReader, BufferedReader, atd. Případně prohledej forum, už se to tu řešilo.

Jura
C / C++ › získání horního a dolního ba…
21. 5. 2008   #74551

A ješte ten WORD , což je unsigned int short nebo (unsigned __int16)

Jura
C / C++ › získání horního a dolního ba…
21. 5. 2008   #74550

Viz. např. MSDN




#define BYTE unsigned char

#define HIBYTE(w) ((BYTE) (((WORD) (w) >> 8) & 0xFF))
#define LOBYTE(w) ((BYTE) (w))

Jura
Java › Semestrální práce - vlákna,…
21. 5. 2008   #74517

zip123 napsal:
To Nightsorrow : libi se mi napad s vytvorenim noveho objektu, ale uz ted vidim nejvetsi problem v tom setrideni: do mapy to muzu hodit, a tree mapa treba rovna podle klice ne? ale da se do tree mapy dat jako klic integer???



Místo primitivního datového typu použij wrapper Integer. jde o to, že klíč musí implementovat rozhrani Comparable, aby kolekce věděla, jak má dané klíče porovnávat.

[url]
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Integer.html
[/url]



jo a jeste dalsi dotaz, kdyz to budu potrebovat jeste ukladat a nacitat ze souboru, nejlepsi by bylo, aby objekt implementoval serializble, ale nas prednasejici rekl, ze pokud to ulozim, a pak znovu zbuildime program, uz to neprecteme...Za zbyldeni se pocita i kazdy dalsi start programu???



No, nejspíše měl na mysli promblém s serialVersionUID. Ale pokud neplánuješ dělat změny v kódu, které by znemožnili pozdější načítání, tak bych v tom problém neviděl.
[url]
http://www.javapractices.com/topic/TopicAction.do?Id=45
[/url]
[url]
http://java.sun.com/developer/technicalArticles/Programming/serialization/
[/url]

Jura
C / C++ › pohyblivy graf
8. 5. 2008   #73296

Vzhledem k tomu, že se tu poslední dobou michájí jazyky C++ a C#, tak se zeptám:
Jaký jazyk? Dále pak, na jakém OS to má běžet? Pokud je to Win, má se použít čisté API nebo MFC,atd?

Jura
C / C++ › MFC globální proměné
24. 4. 2008   #72224

Způsobů je více:

1) Deklaruj ji jako extern(v *.h) a v příslušném cpp ji inicializuj
2) Udělej z ní členské proměnné v potomkovi CWinApp. Tato třída je totiž dostupná všude. Je to sice více psaní nicméně



class CPawlApp : CWinApp
{
private:
CGlobalSettings m_GlobalSettings;

public:
inline const CGlobalSettings& GetGlobalSetting() const { return m_GlobalSettings;}
inline CGlobalSettings& GetGlobalSettings() { return m_GlobalSettings;}

};
// nejaky jiny soubor
#include "Pawl.h" // deklarace tridy CPawlApp

void nejaka_fce_nebo_metoda()
{
CPawlApp* pApp = (CPawlApp*) ::AfxGetApp();
ASSERT( pApp );

CGlobalSettings& globalSettings = pApp->GetGlobalSettings();
....

}

Jura
C / C++ › Operátor | nebo ||
21. 4. 2008   #71963

Tak znova napíšu, co jsem psal. Nejspíše bude nutné si ten výsledek zapamatovat někde jinde(v pomocné proměnné, v mém případě je to bSucc a nemá nic společného s proměnnou a). Je taky možné, že absolutně nechápu o co ti jde, ale dvě hodnoty do proměnné bool prostě nenacpeš...

Jura
C / C++ › MFC globální proměné
21. 4. 2008   #71927

To Pawl :

1) #import <msxmlXX.dll> dej do soubrou StdAfx.h, a zkotroluj si jestli nepoužíváš někde stejné názvy glob. proměnných
2) citace z MSDN:

An apartment must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx.


Ale to platí obecně, když používáš nějaké systemové zdroje, tak je obvykle dobré, je zase vrátit..

Jura
C / C++ › Operátor | nebo ||
21. 4. 2008   #71925

To bukaj :
To že občas napíšu blbost vím, ale díky za připomenutí. Nicméně reagujeme oba na to stejné?
Já psal odpověď na:


Možná jsi nepostřeh, že to chci zpracovávat pro celý vector a až po zpracování dle hodnoty a se rozhodnout, co uděl...


A tohle:

a = a || vecot[i].zpracovani();

nebo

if(vec[i].zpracovani())
a = true;

případně mé(nepochopení)

a = vector[i].zpracovani();


Vždy přepíše původní hodnotu.

Já jiné řešení předchozího požadavku neznám(kromě nastavování nějakých bitů, aby to teda bylo skutečně v jedné proměnné, přip. union). Co se týče přehlednosti, tak na to reagovat vzhledem k předchozímu nebudu.

Jura
C / C++ › Operátor | nebo ||
20. 4. 2008   #71833

No, v tom případě tě asi zklamu, protože takto to nejspíše nebude fungovat. Prostě si někde budeš muset zapamatovat, jestli se fce povedly:

bool bSucc = false;
for(...)
if( vec[i].zpracuj() ) bSucc = true;

if( bSucc ) neco delej

Řekl bych, že tohle je jeden z nejběžnějších a nejpřehlednějších zápisů, rozhodně pokud na tom projektu nepracuješ sám,tak bych se pokusil to psát hlavně čitelně.

Jura
C / C++ › Operátor | nebo ||
20. 4. 2008   #71804

Nerozumím, ale:



a = vector[i].zpracovani();

Jura
C / C++ › MFC globální proměné
18. 4. 2008   #71625

A voláš v ExitInstance() ve třídě aplikace CoUnitialize?

Jura
C / C++ › try catch
4. 4. 2008   #70587

To mephi :

To je zcela stadartní způsob zachytávání výjimek. Catch(...) znamená, že se zachytí jakýkoliv typ výjímek. Ostatně takto by se měly psát handlery výjimek.



try
{
}catch( CMojeVyjimka &e)
{
}
catch( CDalsiVyjimka& e)
{
}
catch(...)
{
// necekana chyba, ze ktere se program nedokaze zotavit...
}


Jura
C / C++ › try catch
4. 4. 2008   #70564

No, pokud používáš debug verzi, tak se o to bude starat prostředí. Vybuilduj release, pak by to už mohlo fungovat normálně. Případně zkus projít nastavení Builderu, snad to tam někde bude.

 

 

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