Używam funkcji z zewnętrznego pliku pas. Mogę korzystać z niektórych funkcji, ale z innych nie. O ile widzę, że funkcje są deklarowane w ten sam sposób, chciałbym opublikować część pliku, ale nie wiem, jak publikować duże ilości kodu.

3
Bjørn Moholt 21 czerwiec 2011, 10:38
Zawsze możesz umieścić plik .pas w jakimś programie do udostępniania plików i link do pliku. Proszę, zamieść deklarację funkcji, czy jest to część klasy, sprawdź, czy nie jest to funkcja prywatna klasy..
 – 
BugFinder
21 czerwiec 2011, 10:43
Pastebin (dowolny wybór) jest do tego w porządku.
 – 
Premature Optimization
21 czerwiec 2011, 11:15

2 odpowiedzi

Najlepsza odpowiedź

Możesz korzystać z funkcji, które są zadeklarowane w sekcji interface, czyli sekcji kodu przed sekcją implementation.

Prawdopodobnie próbujesz wywołać funkcje, które są zdefiniowane tylko w sekcji implementacji, czyli w kodzie, który pojawia się po słowie kluczowym implementation.

Te różne sekcje opisują sposób, w jaki Delphi wdraża publiczną i prywatną widoczność na poziomie jednostki.

Zwykle w dobrze napisanych jednostkach istnieje powód, dla którego funkcje stają się prywatne dla jednostki. Ale jeśli uważasz, że rozsądnie jest pominąć decyzję autora, musisz ponownie zadeklarować funkcję w sekcji interfejsu. Umożliwi to dostęp do kodu, który korzysta z jednostki innej firmy.

5
David Heffernan 21 czerwiec 2011, 10:49

Plik nie jest poprawnie połączony i/lub nie znajduje się w ścieżce wyszukiwania projektów i/lub jest cieniowany przez inny plik z tymi samymi nazwami funkcji i/lub funkcjami nieparzystymi zawartymi w klauzulach $IFDEF.

Sprawdź pisownię, użyj klauzul, lokalizacji funkcji pracy (Ctrl+kliknij nazwę funkcji w kodzie), klauzule $IFDEF.

  1. Plik nie jest poprawnie połączony w opcjach środowiska Delphi
  2. Plik może znajdować się poza ścieżką wyszukiwania projektu. Dlatego nie jest powiązany.
  3. Ścieżka do pliku jest wpisana błędnie w projekcie (plik DPR). Np. odnosisz się do starszej ścieżki ze starszą wersją pliku.

W każdym z tych przypadków niektóre funkcje mogą zostać przejęte z innych plików, jeśli nazwa pasuje. Np. funkcja gluUnproject może być wzięta zarówno z OpenGL.pas, jak i dglOpenGL.pas, jeśli pierwsza jednostka nie jest poprawnie połączona, miałbym ten sam problem, co teraz - niektóre funkcje działają, a niektórych brakuje. W każdym z przypadków powinieneś skompilować swój projekt, Ctrl+Kliknij na nazwę działającej funkcji i zobacz, dokąd to zaprowadzi, sprawdź lokalizację wersji pliku.

  1. Funkcje mogą znajdować się wewnątrz klauzul $IFDEF. Są to dyrektywy kompilatora i kod w takiej klauzuli będzie niewidoczny dla kompilatora, jeśli nie zostanie spełniony określony warunek. Np. {$IFDEF MSWindows} Funkcja {$ENDIF} nie będzie dostępna w systemie Linux.
5
Kromster 21 czerwiec 2011, 11:15
2
Na marginesie polecam nigdy nie używać ścieżek wyszukiwania. Dołącz wszystkie potrzebne pliki bezpośrednio do projektu lub za pośrednictwem pakietów. Ścieżki wyszukiwania sprawiają, że brakuje Ci kontroli i wiedzy o tym, jakie jednostki są w Twoim programie.
 – 
David Heffernan
21 czerwiec 2011, 11:32
2
4. Na ścieżce wyszukiwania znajduje się dcu starszej wersji z mniejszą liczbą funkcji.
 – 
Marco van de Voort
21 czerwiec 2011, 14:16