Funktion wird nicht gefunden, warum?

Für Fragen rund um die Ide und zum Debugger

Funktion wird nicht gefunden, warum?

Beitragvon thosch » 12. Nov 2018, 17:02 Funktion wird nicht gefunden, warum?

Hallo,

ich habe diesen Quellcode:

Code: Alles auswählen
 
var
  wc: TWndClassEx;
begin
  wc.cbSize          := SizeOf(TWndClassEx);
  wc.Style           := CS_HREDRAW or CS_VREDRAW;
  wc.lpfnWndProc     := @MyWindowProc;
  wc.cbClsExtra      := 0;
  wc.cbWndExtra      := 0;
  wc.lpszMenuName    := nil;
  wc.lpszClassName   := 'Hauptfenster';
  wc.hIconSm         := 0;
 
  RegisterClassEx(wc);
 
  CreateWindowEx(
    0,
    'Hauptfenster',
    'Testanwendung',
    WS_CAPTION,
    100,50,
    800,600,
    0,
    0,
    0,
    nil
  );
 


Nun sagt mir der Compiler, er könne die Funktion CreateWindowEx nicht finden. Ist die nicht genauso in der Windows Unit definiert wie die Funktion RegisterclassEx? Die moniert der Compiler nicht. Was ist hier los?

Weil mich dieses Verhalten irretiert, habe ich diese Frage in "Benutzung der IDE" gepostet, da Freepascal sehr viele Include Dateien verwendet. Kann es sein, dass der Compiler da durcheinander kommt?

Ich benutze hierfür Lazarus 1.6.4!

.
thosch
 
Beiträge: 157
Registriert: 10. Jul 2017, 19:32

Beitragvon Socke » 12. Nov 2018, 17:15 Re: Funktion wird nicht gefunden, warum?

thosch hat geschrieben:ich habe diesen Quellcode:

Ohne deinen Uses-Abschnitt lässt sich das wohl nicht beantworten ... Die Funktion CreateWindowEx ist zumindest bei FPC 3.0.4 in der Windows-Unit enthalten.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2581
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon thosch » 12. Nov 2018, 18:05 Re: Funktion wird nicht gefunden, warum?

Socke hat geschrieben:
thosch hat geschrieben:ich habe diesen Quellcode:

Ohne deinen Uses-Abschnitt lässt sich das wohl nicht beantworten ... Die Funktion CreateWindowEx ist zumindest bei FPC 3.0.4 in der Windows-Unit enthalten.


Und bei FPC 3.0.2? Kann es Probleme geben wenn die Funktion in eine Include Datei ausgelagert wurde. Ich habe nur die Units Classes, Sysutils und Windows in meiner Uses Klausel stehen. In dieser Reihenfolge. Kann mir allerdings nicht vorstellen, dass die Reihenfolge da so entscheidend ist.
thosch
 
Beiträge: 157
Registriert: 10. Jul 2017, 19:32

Beitragvon MacWomble » 12. Nov 2018, 20:23 Re: Funktion wird nicht gefunden, warum?

Was passiert denn, wenn du CreateWindowsEx markierst, die rechte Maustaste betätigst und auf 'finde Deklaration' gehst?

Du kannst auch direkt in der unit windows.pas nachsehen, ob die Funktion dort enthalten ist.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 768
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19 Cinnamon / CodeTyphon Generation V Plan 6.60 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon af0815 » 12. Nov 2018, 20:49 Re: Funktion wird nicht gefunden, warum?

thosch hat geschrieben:Und bei FPC 3.0.2? Kann es Probleme geben wenn die Funktion in eine Include Datei ausgelagert wurde.

Ob es bei 3.0.2 drinnen ist, kannst DU einfach nachsehen. Nein, das auslagern in include macht keine Probleme, ausser ams such es nicht mit Lazarus und muss dann rätseln wo es dazugehört. Es ist Teil des Konzeptes, damit Plattformspezifische Teile einfacher zugeordnet werden können, halt ohne große IFDEF Origien. Dazu wird der Plattformspezifische aufruf in der include Datei untergebracht während das Interface allgemein ist.

Ich verwendet öfters den 'Agent Ransack' wenn mir was fehlt und ich will wissen wo das ev. in den Sourcen verwendet oder deklariert wird.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3603
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon thosch » 13. Nov 2018, 14:52 Re: Funktion wird nicht gefunden, warum?

Danke zunächst für Eure Hilfe. Ich habe in den Projekteinstellungen nachgeschaut und da muss ich feststellen, dass ich keine Pfade mehr unter andere Units hinzufügen kann. Weder durch Eingabe in die Eingabzeile durch Semikolons getrennt, noch durch Aufruf des Eingabedialoges durch Klicken des Buttons rechts neben der Eingabezeile. Was ist da los?

Wie war das gleich noch mal mit der fpc Kommandozeile? Ich kann doch noch eine extrafpc.cfg Datei schreiben, die meine Pfade enthält.

Oder ich kann doch auch unter Compilerkommandos Eintragungen vornehmen. WO trage ich da meine extrafpc.cfg ein? Reicht es dann, nur den DAteinamen dieser Datei eizugeben oder muss ich da weitere Optionen setze?

Ich habe ja da schon mal den Dialog "Einstellungen für Projekt", dort Compiler, wo in der Eingabezeile das Makro $(CompilerPath) eingetragen ist. Sicher hat aber nun Lazarus schon eine Kommandozeile implizit, sonst würde ja das Compilieren überhaupt nicht klappen. Wie also trage ich nun die Zusatzoption ein, dass der meine Datei extrafpc.cfg mit meinen Pfadangeben mit verarbeiten soll, ohne die implizite Kommandozeile kaputt zu machen? Ich will ja nun während des Kompiliervorganges diese Datei auswerten.

Als Workaround kann ich natürlich meine Pfade in die fpc.cfg im Bin Verzeichnis meines Compilers schreiben.

Die saubere Lösung aber wäre die projektspezifischen Pfade in die extrafpc.cfg zu schreiben und Lazarus diese Datei zur Auswertung zu übergeben. Aber wie mache ich das in Lazarus. Ich glaube nicht, das ich diese Datei einfach nur hinter das Makro $(CompilerPath) schreiben muss. Da wird wohl noch mehr dazu gehören, aber was?
Zuletzt geändert von thosch am 13. Nov 2018, 16:20, insgesamt 1-mal geändert.
thosch
 
Beiträge: 157
Registriert: 10. Jul 2017, 19:32

Beitragvon wp_xyz » 13. Nov 2018, 16:19 Re: Funktion wird nicht gefunden, warum?

Bevor du an den Pfaden herumfummelst, würde ich vorschlagen, einfach Lazarus neu zu installieren - du bist auf Windows, und da ist das eine Sache von ein paar Minuten.
wp_xyz
 
Beiträge: 2835
Registriert: 8. Apr 2011, 08:01

Beitragvon thosch » 13. Nov 2018, 21:55 Re: Funktion wird nicht gefunden, warum?

Dann werde ich die Neuinstallation auch machen. Danke Euch allen für Eure Hilfestellung! Manchmal ist "der Wurm drin"!
thosch
 
Beiträge: 157
Registriert: 10. Jul 2017, 19:32

Beitragvon af0815 » 14. Nov 2018, 08:46 Re: Funktion wird nicht gefunden, warum?

thosch hat geschrieben:Danke zunächst für Eure Hilfe. Ich habe in den Projekteinstellungen nachgeschaut und da muss ich feststellen, dass ich keine Pfade mehr unter andere Units hinzufügen kann. Weder durch Eingabe in die Eingabzeile durch Semikolons getrennt, noch durch Aufruf des Eingabedialoges durch Klicken des Buttons rechts neben der Eingabezeile. Was ist da los?

Hast du den Effekt auch bei einem neu erstellten Programm oder nur bei einem bestehenden ?! Weil laut Beschreibung du hier in den Projektspezifischen Einstellungen bist, nicht in den direkt Lazarusspezifischen. Nicht, das du nur ein Problem mit dem Projekt hast.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3603
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon thosch » 15. Nov 2018, 16:14 Re: Funktion wird nicht gefunden, warum?

af0815 hat geschrieben:
thosch hat geschrieben:Danke zunächst für Eure Hilfe. Ich habe in den Projekteinstellungen nachgeschaut und da muss ich feststellen, dass ich keine Pfade mehr unter andere Units hinzufügen kann. Weder durch Eingabe in die Eingabzeile durch Semikolons getrennt, noch durch Aufruf des Eingabedialoges durch Klicken des Buttons rechts neben der Eingabezeile. Was ist da los?

Hast du den Effekt auch bei einem neu erstellten Programm oder nur bei einem bestehenden ?! Weil laut Beschreibung du hier in den Projektspezifischen Einstellungen bist, nicht in den direkt Lazarusspezifischen. Nicht, das du nur ein Problem mit dem Projekt hast.


Bei einem bestehenden. Nachdem ich das Hauptprogramm geändert habe. Um damit eine Unit des bestehenden Projektes zu testen.

Neues Projekt erstellt und die zu testende Unit meines bestehenden Projektes dort in die Uses Klausel aufgenommen.

.
thosch
 
Beiträge: 157
Registriert: 10. Jul 2017, 19:32

• Themenende •

Zurück zu Benutzung der IDE



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried