[delphi] mam blad przy CreateOleObject

[delphi] mam blad przy CreateOleObject
W3
  • Rejestracja:około 19 lat
  • Ostatnio:prawie 19 lat
0
Kopiuj
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:

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

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
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 !

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
0

a daj zamiast
OleApplication : Variant;
OleApplication : OleVariant;


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
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

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
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

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
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ć :)


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
Morris
  • Rejestracja:ponad 19 lat
  • Ostatnio:4 dni
  • Postów:37
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.


M.O.R.R.I.S.: Mechanical Obedient Replicant Responsible for Infiltration and Sabotage
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
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.


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
P2
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 17 lat
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.