MFC globální proměné – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

MFC globální proměné – C / C++ – Fórum – Programujte.comMFC globální proměné – C / C++ – Fórum – Programujte.com

 

Pawl0
Newbie
18. 4. 2008   #1
-
0
-

Ahoj,

Začínám z MFC, vytvořiil jsem se objekt

  CoInitialize(NULL);

hr= pXMLDom.CreateInstance(__uuidof(DOMDocument30));

pXMLDom, který je definovaný v sys knihově. Abych měl k tomuto objektu přístup odkud koliv tak jsem si vytvořil zvláštní knihovnu.

glb.h
 


#ifndef _glb_h_
#define _glb_h_

#import <msxml3.dll>
using namespace MSXML2;

HRESULT hr;
IXMLDOMDocumentPtr pXMLDom;
char exe_full_path[MAX_PATH], exe_drive[_MAX_DRIVE], exe_dir[_MAX_DIR], exe_ext[_MAX_EXT], exe_fname[_MAX_FNAME];
#endif


Také jsem zde dal i další globální proměnné
Když tento h soubor připojil do více cpp soubor tak mě vyjel výpis:

Protože mě padal chyba při linkování dal jsem parametr /FORCE:MULTIPLE a výpis byl takový to.:
 

MyWindDlg.obj : warning LNK4006: "long hr" (?hr@@3JA) already defined in MyWind.obj; second definition ignored
MyWindDlg.obj : warning LNK4006: "class _com_ptr_t<class _com_IIID<struct MSXML2::IXMLDOMDocument,&struct __s_GUID _GUID_2933bf81_7b36_11d2_b20e_00c04f983e60> > pXMLDom" (?pXMLDom@@3V?$_com_ptr_t@V?$_com_IIID@UIXMLDOMDocument@MSXML2@@$1?_GUID_2933bf
81_7b36_11d2_b20e_00c04f983e60@@3U__s_GUID@@A@@@@A) already defined in MyWind.obj; second definition ignored
MyWindDlg.obj : warning LNK4006: "char * exe_full_path" (?exe_full_path@@3PADA) already defined in MyWind.obj; second definition ignored
MyWindDlg.obj : warning LNK4006: "char * exe_drive" (?exe_drive@@3PADA) already defined in MyWind.obj; second definition ignored
MyWindDlg.obj : warning LNK4006: "char * exe_dir" (?exe_dir@@3PADA) already defined in MyWind.obj; second definition ignored
MyWindDlg.obj : warning LNK4006: "char * exe_ext" (?exe_ext@@3PADA) already defined in MyWind.obj; second definition ignored
MyWindDlg.obj : warning LNK4006: "char * exe_fname" (?exe_fname@@3PADA) already defined in MyWind.obj; second definition ignored

Proměnná char fungují normálě, pXMLDom fnuguje, ale při ukončení aplikaci skočí "program vykonal neplatnou operaci ..."

Nahlásit jako SPAM
IP: 85.207.186.–
18. 4. 2008   #2
-
0
-

To Pawl : maš čas?

Nahlásit jako SPAM
IP: 85.93.179.–
18. 4. 2008   #3
-
0
-

Potřebuju radu!!!

Nahlásit jako SPAM
IP: 85.93.179.–
Jura
~ Anonymní uživatel
637 příspěvků
18. 4. 2008   #4
-
0
-

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

Nahlásit jako SPAM
IP: 85.207.192.–
Pawl0
Newbie
21. 4. 2008   #5
-
0
-

To Jura : Když jsem to zkoušel poprvé, kde jsem tuto třídu zapouzdřil do CWinApp a tam jsem na konci nemusel volat ExitInstance(), ale mě zaráží ta věc, že mě to vypisuje chybu nebo z parametru varování LINKERU.

Nahlásit jako SPAM
IP: 85.207.186.–
Jura
~ Anonymní uživatel
637 příspěvků
21. 4. 2008   #6
-
0
-

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..

Nahlásit jako SPAM
IP: 85.207.192.–
Pawl0
Newbie
24. 4. 2008   #7
-
0
-

To Jura :

Dobře, když bychom vynechali definici této třídy. Tak bych se znovu zkusil zeptat, jak a kde umístit jednoduší proměnné třídy (CString). Pro globální použiti. Uvedu příklad potřebuji třeba string z cestou k souboru co používám, nějaký ty implicitní hodnoty tam přiřazuji ještě před voláním Hlavního Dialogu. A pak bych chtěl tento string používání i v jiných oknech, jak a kde to deklarovat.

Nahlásit jako SPAM
IP: 85.207.186.–
Jura
~ Anonymní uživatel
637 příspěvků
24. 4. 2008   #8
-
0
-

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();
....

}

Nahlásit jako SPAM
IP: 85.207.192.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

MFC — založil Peter D.

Pomoc s MFC — založil kwit

Kniznica MFC — založil Marek

MFC controls — založil Hunty

MFC - share DLL — založil Pawl

Moderátoři diskuze

 

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