Dobry den,
mám vytvořený program v C++Builder 6.Tento program načte nějake informace a pak je přepíše do Excelu. Vše mě funguje :) Ale jak mile chci vytvořit spustitelný exe soubor i na jinem PC bez Bulderu, tak mě program skolabuje na zapisu do excelu, jinač funguje, jen jak zmačknu tlačítko export Excel tak to hodí chybu. Tato chyba se objeví hned po prekompilování toho exe souboru i na tom samém počítači!! Nevíte někdo jak tuto chybu opravit nebo obejít??
Předem děkuji za snahu :)
Hlášená chyba je:
HRCHECK:
(this->get_Item(Index, (LPDISPATCH*)&RHS)) Error: C0000005(-1073^7 41819)@ c:\program file\borland\cbulder6\include\vcl\Excel_2k.h/9908 Press[Y]es to terminate, [N]o to continue and [C]ancel to Debug
Kod programu pod tlačítkem Exkoprt Excel je:
int i,str=1;
OpenDialog1->Filter = "Excel files (*.xls)|*.XLS";
if(OpenDialog1->Execute())
{
//--
Form1->ExcelApplication1->set_Visible(0, true);
//--
try {
ExcelApplication1->Connect();
}
catch(Exception &e){
ShowMessage("Chyba Connection");
}
try{
ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Open(StringToOleStr(OpenDialog1->FileName),
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, LCID(LOCALE_USER_DEFAULT)));
}
catch(Exception &e){
ShowMessage("Chyba Open Workbooks");
}
try{
ExcelApplication1->set_DisplayAlerts(0, false);
}
catch(Exception &e){
ShowMessage("Chyba Display Alerts");
}
//------------------------------
for(i=0;i<ukZMkat130;i++)
{
ukazatel=ZMkat130[i];
try{
ExcelWorksheet1->ConnectTo(ExcelWorkbook1->Sheets->get_Item(TVariant(str)));
ExcelWorksheet1->Cells->set_Item(Variant(i+1), Variant(1),Variant(WideString((*ukazatel).Jmeno)));
ExcelWorksheet1->Cells->set_Item(Variant(i+1), Variant(2),Variant(WideString((*ukazatel).Skola)));
}
catch(Exception &e){
ShowMessage("Chyba Connect Sheets get Item");
}
}
//-----------------------------------------------------------
//-----------------------------------------------------------
Fórum › C / C++
C++ komunikace s Excelem
Chyba kód C0000005 je access violation, neboli přístup do paměti na špatné místo. Zkontroloval bych, jestli na tom řádku (a vůbec v celém programu) jsou správné ukazatele (např. abys nevolal NULL->get_Item). Může se třeba stát, že některá metoda se provede chybně, vrátí NULL a ty pak na něm něco voláš.
To Quiark :
JJ to máš asi pravdu že přistupuju na špatne misto ale nechápu pravě proč. Jen když si vemeš techto 5 řádku, který zase plně fungujou do té doby než chci udělat spustitelny exe soubor bez Bulderu...Prave to na to m nechápu že to přestane fungovat až po překladu a i na tom samém pc kde Bulder mam... Jestli mě tam chybí ještě nějak spojit Woekbooks se Sheet.. nebo nějaka jina funkce to pravě nevím :(
ExcelApplication1->Connect();
ExcelApplication1->set_Visible(0, true);
ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Add());
ExcelWorksheet1->ConnectTo(ExcelWorkbook1->Sheets->get_Item(TVariant(1)));
ExcelWorksheet1->Cells->set_Item(Variant(2), Variant(3),Variant(WideString("text")));
Tady ještě posílam postup jak vytvarím ten spustitelny exe soubor, jen jestli je dobře...:
---
Exe spustitelne i bez Builderu:
V menu: Project, pak Options, pak:
Na záložce Packages je dole zaškrtnuté políčko Build with runtime packages - to zrušit.
Na záložce Compiler je dole vlevo tlačítko Release se zeleným panáčkem - to zmáčknout, změní se tím všelijaká nastavení.
Na záložce Linker v levé polovině celkem nahoře je zaškrtnuté Use dynamic RTL - zrušit.
Projekt pak uložte a znovu vytvořte exe.
---
Nevim... budeš muset experimentovat - zjistit, za jakých podmínek je co NULL (nebo špatná adresa), zkus z toho nastavení zapnout třeba jen polovinu, druhou vypnout a tak. Mno, ideální příležitost naučit se, co vlastně ta nastavení znamenají ;)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Nabízím kurz programování pod Excelem — založil Keft
Zamknu Váš VBA kód (makra) pod Excelem nebo celý Excel. — založil Keft
Com komunikace v C — založil Bedla
Komunikace — založil Zelenáč
Komunikace Tříd — založil Guga
Moderátoři diskuze