Mam problem z dzidziczeniem klas:
W ExcelServe.cpp mam cos takiego:
#pragma hdrstop
#include "ExcelServer.h"
//---------------------------------------------------------------------------
//** calss XlApplication:: declarations **//
XlWorkbooks XlApplication::Workbooks(int byIndex)
{
SetWorkbooks(FxlApp.OlePropertyGet("Workbooks"));
SetThisWorkbook(FxlApp.OlePropertyGet("Workbooks", byIndex));
};
XlWorkbooks XlApplication::Workbooks(void) {};
XlWorkbooks XlApplication::Thisbook(void) {};
void XlApplication::Connect()
{
HWND wnd = FindWindowA("XLMAIN", 0);
if (wnd)
{ FxlApp = Variant::GetActiveObject("Excel.Application");}
else
{ FxlApp = Variant::CreateObject("Excel.Application");
FxlApp.OlePropertySet("Visible", true);
FxlApp.OlePropertyGet("Workbooks").OleProcedure("Add");
SetWorkbooks(FxlApp.OlePropertyGet("Workbooks"));
SetThisWorkbook(FxlApp.OlePropertyGet("Workbooks",1));
}
};
void XlApplication::Connect(String xlPath)
{
HWND wnd = FindWindowA("XLMAIN", 0);
if (wnd)
{ FxlApp = Variant::GetActiveObject("Excel.Application");}
else
{ FxlApp = Variant::CreateObject("Excel.Application");
FxlApp.OlePropertySet("Visible", true);
Variant book = FxlApp.OlePropertyGet("Workbooks", "Add");
book.OleProcedure("Open", xlPath);
SetThisWorkbook(book);
}
};
void XlApplication::Deconnect(bool Close)
{
if (Close) {
FxlApp.OleProcedure("Quit");
}
FxlApp = Unassigned();
};
XlApplication::XlApplication() : XlWorkbooks()
{
FxlApp = Unassigned();
};
XlApplication::~XlApplication()
{
FxlApp = Unassigned();
};
#pragma package(smart_init)
w ExcelServe.h mam cos takiego:
#include <ComObj.hpp>
#include "XlWorkbooks.h"
//---------------------------------------------------------------------------
class XlApplication: XlWorkbooks
{
public:
void Connect();
void Connect(String xlPath);
void Deconnect(bool Close = false);
XlWorkbooks Workbooks(int byIndex);
XlWorkbooks Workbooks(void);
XlWorkbooks Thisbook(void);
XlApplication();
~XlApplication();
protected:
private:
Variant FxlApp;
};
teraz
#include "XlWorkbooks.h"
//---------------------------------------------------------------------------
//** calss XlWorkbooks:: declarations **//
String XlWorkbooks::Name(void)
{
return ThisWorkbook.OlePropertyGet("Name");
};
int XlWorkbooks::Count(void)
{ Variant cos = FxlWorkbooks.OlePropertyGet("Count");
String nbr = VarToStr(cos);
return StrToInt(nbr);
// i tu sie krzaczy. po zainicjalizowaniu FxlWorkbooks zawiera wartość,
// potem przy odwolaniu sie do funkcji int XlWorkbooks::Count FxlWorkbooks jest puste
// dlaczego? Co robie nie tak
};
XlWorksheets XlWorkbooks::Worksheets(int byIndex)
{
FxlSheets = ThisWorkbook.OlePropertyGet("Worksheets");
ThisSheet = ThisWorkbook.OlePropertyGet("Worksheets", byIndex);
};
XlWorkbooks::XlWorkbooks() : XlWorksheets()
{
FxlWorkbooks = Unassigned();
ThisWorkbook = Unassigned();
};
XlWorkbooks::~XlWorkbooks()
{
FxlWorkbooks = Unassigned();
ThisWorkbook = Unassigned();
};
i w *.h
#ifndef XlWorkbooksH
#define XlWorkbooksH
#include <ComObj.hpp>
#include "XlWorksheets.h"
//---------------------------------------------------------------------------
class XlWorkbooks : XlWorksheets
{
private:
Variant ThisWorkbook,
FxlWorkbooks;
public:
String Name(void);
int Count(void);
XlWorksheets Worksheets(int byIndex);
XlWorkbooks();
~XlWorkbooks();
protected:
void SetThisWorkbook(Variant AWorkbook)
{
ThisWorkbook = AWorkbook; // i tu przy ustawianiu z XlApplucation nadawana jest warosc
}
void SetWorkbooks(Variant AWorkbooks)
{
FxlWorkbooks = AWorkbooks; // tu tez przy ustawianiu z XlApplucation nadawana jest warosc
};
};
#endif
potem w aplikacji mam gdzies:
XlApplication App;
App.Connect();
int Result = App.Workbooks().Count();
i tu w ciele funkcji Count widze ze FxlWorkbooks nie jest zdefiniowany,
ort! analizujac step by step widzxialem jak zostala do niego przypisana warosc (interfejs excelowskiego Workbooks)
Prosze was o info co spierniczylem i co tu jest wbrew logice Borlan C++?
// popraw literówki ! Zacięło Ci się 't' w klawiaturze? - Q