[delphi] mam blad przy CreateOleObject

0
var
  OleApplication : Variant;
begin
 OleApplication := CreateOleObject('Excel.Application');
end;

kiedy probuje kompilowac wyswietla undelcared identifier ?
CO mozna poradzic ?

0

w deklaracji modulu do listy uses dodales modul ComObj?
np:

unit ExcelServer;

interface
 uses Windows, Variants, <b>ComObj</b>, SysUtils;
0

Błąd przy CreateOleObject ale nie spowodowany brakami w uses !!! a czym cholera wie. Może ktoś pomoże. Bląd jaki wyskakuje to :
Variant does not reference an automation object.

0

może głupie pytanie ale masz excela zainstalowanego?

0

Oczywiście że mam zainstalowanego excela. Nie o to chodzi.
Te same procedury korzystania z pliku excela w Delphi w jednym projekcie (nowo otwarym) działają bez problemów (ten sam komputer, to samo środowisko Delphi ale nowy projekt) a w projekcie (MDI) do któego chce to dodać przestaje działać i pokazuje ten błąd:

"Variant does not reference an automation object."

I kompletnie nie wiem o co chodzi, Jeśli ktoś sie z tym już spotkał to prosze o pomoc !

0

a daj zamiast
OleApplication : Variant;
OleApplication : OleVariant;

0

Nie pomogło niestety. To chyba jakiś grubszy problem. Niestety spotkałem sie z nim pierwszy raz i pewnie dla tego jest grubszy. Pozdrawiam

0

masz w pliku projektu (.dpr) linię
Application.Initialize; ?

0

MisiekD masz gg ?

MisiekD Dzięki wielkie za rozwiązanie problemu. Brakowało mi tej linii. Zaoszczedziłeś mi kupe czasu w szukaniu problemu bo kwestie excela chce dodać do dość rozbudowanego programu i czekalo mnie bardzo dużo kopania w źródłach a tak sprawa sie wyjaśniła
Dzięki wielkie :)))))))))))

MisiekD nie szukasz czasem pracy tak sobie dorobić przy programowaniu w Delphi?
Tak w ogóle wisze Ci zgrzewe :). Pozdrawiam

0

dodanie tej linijki powoduje wykonanie się sekcji initialization modułów dodanych do Twojego projektu, w tym winowajcy ComObj

co do dorobienia to wyślij mi swoje gg na PW to zobaczymy co w tej sprawie będzie można zrobić :)

0
Misiekd napisał(a)

dodanie tej linijki powoduje wykonanie się sekcji initialization modułów dodanych do Twojego projektu, w tym winowajcy ComObj

Że jak? Coś pomyliłeś. Sekcja "initialization" każdego modułu wykonuje się niejako automatycznie (dba o to kompilator).

W Application.Initialize moż byc co najwyżej (m.in.) wywołane CoInitialize() lub OleInitialize(), które to wpływa na możność tworzenia obiektów OLE Automation.

0
Morris napisał(a)

Że jak? Coś pomyliłeś. Sekcja "initialization" każdego modułu wykonuje się niejako automatycznie (dba o to kompilator).

no fakt, masz rację - trochę przekolorowałem

W Application.Initialize moż byc co najwyżej (m.in.) wywołane CoInitialize() lub OleInitialize(), które to wpływa na możność tworzenia obiektów OLE Automation.

a tu nie dokońca tak jest bo Application.Initialize tak na prawdę wywołuje procedurę (bezparametrową) InitProc, która w "czystej" aplikacji wskazuje na nil i jest pomijana, czyli na dobrą sprawę nie robi nic. Pod InitProc można podstawić własną procedurę, niektóre unity (jak np. ComObj) podstawiają tam własną procedurę inicjalizującą (w tym konkretnym przypadku) obiekty COM. Ponieważ procedura InitProc może być tylko jedna stosowana jest sztuczka, która polega na zapamiętaniu "starej" procedury a następnie podstawieniu własnej. W ciele naszej procedury natomiast sprawdza się, czy InitProc <> nil i jeśli tak to wywołuje się ją. Pozwala to na podpięcie się pod InitProc większej liczby procedur.
Sama InitProc (o ile Application.Initialize jest na swoim miejscu) wywoływana jest po wykonaniu wszystkich poleceń z wszystkich modułów z sekcji initialization a przed właściwym startem aplikacji.

0

Bynajmniej pomogło nawet w dwóch sprawach:

  1. CreateOleObject tworzy sie bez problemu.
  2. oraz w błędnej obsłudze jednego z modemów:
    Pewien komponent nie chciał współpracować z jednym z modemów. Z innymi działał ok. A z tym jednym po wysłaniu komendy ATDT... kończyła sie gadka czyli nie dostawalem już żadnego zdarzenia o odebraniu czegokolwiek (nawet BUSY czy NO DIALTONE). Po dodaniu lini z initialize wszystko ok program współpracuje również z tym modem.
    Swoją drogą dziwne że te same procedury działały z innymi modemami, a z tym jednym nie chciały. A po dodaniu tej linii działa również i ten modem hmmmm ... ? Może zbieg okolicznośći.

Nie wiem dla czego nie było tej lini w programie. Prace nad programem przejąłem po kimś i co jakiś czas natrafiam na takie niespodzianki.
Pozdrawiam i dzieki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1