fbpx
Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen
  • Page:
  • 1

TOPIC: Probleme mit ReportPro2 Integration in eigene Applikation

Probleme mit ReportPro2 Integration in eigene Applikation 1 month 23 hours ago #9928

  Heinrich's Avatar Topic Author Heinrich Offline Posts: 18
Hallo zusammen
Wenn ich die RP2 DLL's in meine Applikation integriere und dann einen bestehenden Report aufrufen und drucken will, bekomme ich immer die gleichen beiden Fehler. Wenn ich die erstellten Beispiele (im gleichen Verzeichnis wie meine App) verwende funktioniert der selbe Report einwandfrei.

Es sieht so aus, als ob die benötigten RDD's nicht geladen würden.
Zudem wird in meiner App die Sprach.DLL ebenfalls nicht geladen. Dies habe ich mit explzitem Laden der DLL hinbekommen. Bei den DBF DLL's weiss ich nicht wie ich das anstellen soll.

Was ich bisher versucht habe:
  1. eine eigene kleine App mit dem Aufruf vom Report, funktioniert einwandfrei.
  2. die genau gleiche Funktion vom Beispiel in die Applikation eingefügt und ebenfalls in der Startroutine aufgerufen. Führt zu oben beschriebenem Fehler.
Erstellte Funktion:
FUNCTION OpenRpReport( oOwner AS OBJECT, cReport AS STRING ) AS VOID
	LOCAL oRep AS RpReportRDD
	LOCAL oWin AS ShellWindow	

	oWin :=  ShellWindow{}

 	RDDSetDefault("DBFCDX")
	RDDInfo(_SET_FOXLOCK,.T.)
	SetRpLangDLL("ReportPro2.English.dll")

	oRep := RpReportRDD{ oWin, AllTrim(cReport), "", {} }

	IF oRep:IsValid
		// direkt auf den Drucker
		oRep:Print( "Standblatt" ,;	// cJobName
				  "REPORT.PRN"	,;	// cPrint2Filename
				  "Standblatt"		,;	// cCaption
				  "wird gedruckt.."	 ;	// cMessage
				 )
	ENDIF       
RETURN

Verwendete Vulcan Version: Vulcan.NET 303k
DLL's sind im GAC und zusätzlich auch im entsprechenden ReportProVerzeichnis: VnRuntime

Meine Applikation verwendet verschiedene selbst erstellte DLL's welche je nach Zweck reine C#, X# Core, oder X# VO / Vulcan Einstellungen haben.

Kann mir jemand weiterhelfen?
Gruss Heinrich

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation 1 month 21 hours ago #9929

  FFF's Avatar FFF Away Posts: 633
Welche Fehler?
Wenn in der eigenen kleinen App diese nicht auftreten, muß im Setting ein Unterschied bestehen
Also, was ist die eigene kleine App? Einfach ein Sample modifiziert? Welches, welche Sprache?

Karl
Regards
Karl

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation 1 month 12 hours ago #9941

  Heinrich's Avatar Topic Author Heinrich Offline Posts: 18
Hallo Karl
Die Fehlermeldungen habe ich doch glatt vergessen ;)
Hier sind sie:
  1. The following error was encountered while validating Field Object Expressions:Invalid Field Object expression: Stdblt.Schuetze
  2. The following error was encountered while moving to the first logical record: Invalid argument type

Programmbeispiel:
USING Vulcan.VO
USING ReportPro2

FUNCTION Start( ) AS VOID
	LOCAL oRep AS rpreportrdd
	LOCAL oWin AS ShellWindow
	
	oWin := ShellWindow{}
	
	oRep := RpReportRDD{ oWin, "c:\Temp\xSharpTest\Bin\Reports\KlausSchiessen2018.RPT", "", {} } 
	IF oRep:IsValid
				oRep:Print( "Standblatt",;	// cJobName
						"REPORT.PRN"	,;	// cPrint2Filename
						"Standblatt"		,;	// cCaption
						"wird gedruckt.."	 ;	// cMessage
							 )
	ENDIF

	System.Console.WriteLine("Ende Report mit x#!")          
RETURN
    Und hier die verwendeten Referenzen. Sind in den Beispielen und in der Applikation die selben.
Erstellt mit xSharp und dem Schalter VO
Gruss Heinrich
Attachments:

Please Log in or Create an account to join the conversation.

Last edit: by Heinrich.

Probleme mit ReportPro2 Integration in eigene Applikation 1 month 12 hours ago #9945

  wriedmann's Avatar wriedmann Away Posts: 1671
Hallo Heinrich,
IMHO darfst Du die XSharp Runtime und die Vulcan Runtime nicht im selben Speicherbereich haben.
D.h. Du darfst in einer Applikation, die die Vulcan Runtime verwendet, keine DLL verwenden, die die X# Runtime verwendet.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
This email address is being protected from spambots. You need JavaScript enabled to view it.
www.riedmann.it - docs.xsharp.it

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation 1 month 11 hours ago #9948

  Heinrich's Avatar Topic Author Heinrich Offline Posts: 18
Hallo Wolfgang
Danke für den Tip.
Das könnte meine Probleme verursachen. Ich habe genau eine DLL, welche die xSharp Runtime verwendet.
Ich werden diese DLL mal abändern und schauen was passiert.
Gruss Heinrich

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation 1 month 10 hours ago #9949

  Heinrich's Avatar Topic Author Heinrich Offline Posts: 18
Jetzt habe ich alle DLL's mit der Sprache XSharp und dem Dialekt VO unter Verwendung der VulcanXXXX DLL's erstellt.
Hat leider nicht funktioniert.
die von RP2 benötigten DLL's werden nicht geladen auch die Sprache nicht.

Es sollte doch keine Rolle spielen, dass die RP DLL's mit VisualObjekt 2017 erstellt worden sind. Denn auch da werden die selben VulcanXXX DLL's verwendet.

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation 1 month 10 hours ago #9950

  wriedmann's Avatar wriedmann Away Posts: 1671
Hallo Heinrich,
das hängt damit zusammen, dass die X# Runtime und die Vulcan Runtime die Xbase-Typen auf verschiedene Arten implementiert haben, und das beisst sich dann halt.
Über den Hintergrund siehe hier: www.xsharp.info/articles/blog/runtime-optimizations-in-xsharp
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
This email address is being protected from spambots. You need JavaScript enabled to view it.
www.riedmann.it - docs.xsharp.it

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation / Problem gelöst 3 weeks 5 days ago #10007

  Heinrich's Avatar Topic Author Heinrich Offline Posts: 18
Hallo zusammen

Das Fehlverhalten ist nun bekannt und das Problem gelöst.
Abhilfe schaffte das einfache Einbinden der ReportPro2.runtime DLL in meine Start-App.

Ursache:
Wie in VO gewohnt, habe ich die ReportPro DLL's nur in der Library eingebunden, wo auf die ReportPro Klassen zugegriffen wurde.

Nachdem ich den Quellcode bis zur Ursache des Problems mit dem Debuger untersucht habe, musste ich feststellen dass auf nicht initialisierte Objekte zugeriffen wird. Und das weil die mit _INIT3 gekennzeichneten Prozeduren beim Start der Applikation nicht aufgerufen werden. Scheinbar haben wir hier ein zu VO unterschiedliches Verhalten, das ich noch nicht wusste.

Gruss Heinrich

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation / Problem gelöst 3 weeks 5 days ago #10008

  wriedmann's Avatar wriedmann Away Posts: 1671
Hallo Heinrich,

das klingt sehr logisch....
Einer der großen Unterschiede zwischen den Libraries in VO und denen in .NET ist der, dass VO die Libraries fix ins Exe einlinkt, während sie bei .NET als externe DLLs vorliegen.
Und dann macht .NET genau das, was ich bei VO immer schon gerne gehabt hätte: Lazy loading. Das bedeutet, dass eine Library erst geladen wird, sobald sie das erste Mal gebraucht wird. Das wirkt sich auf die Ladezeiten einer Applikation sehr positiv aus, kann allerdings zu Laufzeitfehlern führen, wenn die benötigte DLL nicht vorhanden ist.
Dummerweise habe ich in der Doku nichts gefunden, was das Verhalten der INIT-Prozeduren erklärt, und auch keine passende Mail dazu.

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
This email address is being protected from spambots. You need JavaScript enabled to view it.
www.riedmann.it - docs.xsharp.it

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation / Problem gelöst 3 weeks 5 days ago #10009

  ArneOrtlinghaus's Avatar ArneOrtlinghaus Offline Posts: 134
Ach, da kann ich auch meinen Senf dazugeben, auch wenn ich nicht das Problem lösen kann.

Dasselbe Verhalten gibt es mit den GUI-Klassen. Diese müssen in das Startprogramm eingebunden sein. Bei einem dynamischen Laden funktionieren sonst bestimmte Sachen nicht und das wahrscheinlich wegen diesen __Init-Prozeduren. Robert hat mal gesagt, dass nur wenige Menschen auf dieser Welt diese Prozesse vollständig verstanden haben...

Aber es gibt meiner Meinung nach nur wenige Ausnahmen.

In unseren Programmen (VO und X#) wird der Großteil der DLLs dynamisch geladen, wenn sie gebraucht werden. Das hatten wir eingebaut, weil eben VO und gleich alle Programme, die auf den mit den Microsoft-Rutime-Dlls für Dlls eingeführten Mechanismen aufbauen, alle DLLs sofort laden wollen, sobald es eine feste Referenz auf eine DLL gibt.

Das ist nun mit Dotnet anders, wie Wolfgang geschrieben hat. Und das ist ein toller Vorteil für etwas größere Programme, denn das programmierte dynamische Laden von DLLs kann auch die Programmierung ganz schön mühsam machen. Bei uns mit über 100 Applikations-Dlls werden im Schnitt vielleicht 30 geladen, weil nicht jeder Benutzer die gleichen Programme benötigt oder bestimmte Programme nur sehr selten benötigt werden.

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation / Problem gelöst 3 weeks 4 days ago #10026

  Karl-Heinz's Avatar Karl-Heinz Offline Posts: 317
Hi Wolfgang,

Evtl. verstehe ich in diesem Kontext etwas falsch, aber _Init procs werden (weiterhin) ausgeführt.

Ich habe eine VO-Dialect DLL mit diesem Inhalt erstellt.

PROCEDURE __MyInit3 _INIT3
	  
	? "Dllinit3"            
	
	RETURN 
	
PROCEDURE __MyInit2 _INIT2 
	
   ? "Dllinit2"
	
RETURN	

PROCEDURE __MyInit1 _INIT1 

   ? "Dllinit1"

RETURN

Einer App dann die DLL Referenz hinzugefügt und diesen Code ausgeführt.

PROCEDURE __MyInit3 _INIT3
	  
	? "AppInit3"            
	
	RETURN 
	
PROCEDURE __MyInit2 _INIT2 
	
	? "AppInit2"  
	
RETURN	

PROCEDURE __MyInit1 _INIT1 

	? "AppInit1"  
   

RETURN

FUNCTION Start( ) AS VOID 
	?
	? "Start() Done" 
	?

RETURN

angezeigt wird dann:

Dllinit1
AppInit1
Dllinit2
AppInit2
Dllinit3
AppInit3

Start() Done



Gruß
Karl-Heinz

Please Log in or Create an account to join the conversation.

Probleme mit ReportPro2 Integration in eigene Applikation 3 weeks 4 days ago #10028

  Heinrich's Avatar Topic Author Heinrich Offline Posts: 18
Hallo Karl

Das Problem tritt erst dann auf, wenn man _INIT Prozeduren in einer DLL hat, welche nicht in der Startapplikation referenziert werden.

Also StartApp -> DLL1 -> DLL2
Wobei die StartApp nur die Referenz auf DLL1 hat und DLL1 eine Referenz auf DLL2

Gruss Heinrich
Attachments:

Please Log in or Create an account to join the conversation.

  • Page:
  • 1
Moderators: wriedmann