  | 
					
						Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!   
						
						
					 | 
				 
			 
			 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		Uwe Wagner
 
 
  Anmeldungsdatum: 17.02.2010 Beiträge: 2
 
  | 
		
			
				 Verfasst am: 17.02.2010, 12:59    Titel: FreeBasic & Fortran.DLL | 
				     | 
			 
			
				
  | 
			 
			
				Hallo zusammen,
 
 
im Forum und in den Hilfetexten zu FB gibt es viele gute Hinweise, wie man eine DLL in FreeBasic erzeugt und einbindet. 
 
Ich habe aber nicht gefunden - oder verstanden? - wie man eine DLL einbindet, die in einer anderen Sprach geschrieben ist. Ich habe eine DLL, die in Open Watcom Fortran77 erzeugt wurde. Zu dieser DLL möchte ich eine Oberfläche in FB schreiben.
 
Die ersten Zeilen des Programms lauten:
 
DIM CallParam AS STRING * 64
 
DIM RetResult1 AS STRING * 512
 
DECLARE SUB xfMainInit STDCALL LIB "xFOILco.DLL" ALIAS "MAININIT" (CallParam AS STRING, RetResult1 AS STRING)
 
 
Der Compiler scheint das gut zu verarbeiten, aber der Linker meldet:
 
C:\Programme\FreeBASIC\bin\win32\ld.exe: connot find -lxFOILco.DLL
 
 
Die DLL steht im gleichen Directory, wie das Basic-Programm. Eine Expliziete Angabe mit -l <Pfad\datei> funktioniert auch nicht.
 
 
Was mache ich falsch?
 
 
DANKE für hilfreiche Antworten
 
Uwe | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Sebastian Administrator
  
  Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
  | 
		
			
				 Verfasst am: 17.02.2010, 13:15    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo und willkommen im Forum!
 
 
Funktioniert es vielleicht so?
 
 	  | Code: | 	 		  DIM library AS ANY PTR
 
DIM xfMainInit AS SUB (BYVAL CallParam As ZString Ptr, BYVAL RetResult1 As ZString Ptr)
 
 
' DLL laden
 
library = DYLIBLOAD( "xFOILco" )
 
IF( library = 0 ) THEN
 
    PRINT "Cannot load the xFOILco dynamic library, ";
 
    PRINT "aborting program..."
 
    END 1
 
END IF
 
 
' Funktion laden
 
xfMainInit = DYLIBSYMBOL( library, "MAININIT" )
 
IF( xfMainInit = 0 ) THEN
 
    PRINT "Cannot get MAININIT function address ";
 
    PRINT "from mydll library, aborting program..."
 
    END 1
 
END IF
 
 
DIM Ausgabe As ZSTRING*512
 
 
xfMainInit ("Hallo",@Ausgabe)
 
 
PRINT TRIM(Ausgabe)
 
 
DYLIBFREE library
 
SLEEP | 	  
 
(Siehe DYLIBLOAD in der Befehlsreferenz.)
 
 
Viele Grüße!
 
Sebastian _________________
  
 
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Uwe Wagner
 
 
  Anmeldungsdatum: 17.02.2010 Beiträge: 2
 
  | 
		
			
				 Verfasst am: 17.02.2010, 13:52    Titel: funktioniert leider nicht | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Sebastian,
 
 
danke für die schnelle Antwort. Wenn ich das Programm compiliere und starte, will Windows einen "Problembericht" an MS senden und das Programm wird beendet.
 
Wenn ich als erstes mit Print einen kurzen Text ausgebe, wird der noch angezeigt, und gleich danach kommt dann wieder der Problembericht.
 
 
Gruß
 
Uwe | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
  | 
   
 
     |