Hallo,
in meinem Hauptprogramm gibt es Indexdateien, die zur Laufzeit eine Funktion (z.B. CCHR() ) benötigen.
Da die gezeichneten Reporte vom ReportPro2 sich ebenfalls dieser Indexdateien bedienen müssen, muss über die ReportPro2_UDF diese Funktion auch bereitgestellt werden. Nun gibt es aber den unschönen Effekt, dass das Hauptprogramm mit einem Laufzeitfehler keinen Index erzeugt:
"Ausnahme durch CLR oder externen Code ausgelöst: Makrocompiler (1,13): Fehler XM0209: Mehrdeutiger Aufruf, könnte ReportPro2_UDF.Functions.CCHR(XSharp.__Usual[]) oder Hauptprogramm.Exe.Functions.CCHR(XSharp.__Usual[] sein)
Natürlich gibt es notwendigerweise diese Funktion zweimal: einmal in der Hauptprogramm.prg und in der Function.prg von ReportPro2.Udf. Im VO und Vulcan hatte das ohne Probleme funktioniert. Erst wenn ich die Funktion in ReportPro2.Udf umbenenne wird zwar im Hauptprogramm nun indiziert, aber den Reporten fehlt jetzt diese Funktion.
Hat jemand eine Idee, wie man das lösen kann?
Gruß Jörg
Ausnahme durch CLR oder externen Code ausgelöst – bei Reference zu ReportPro2
Moderator: wriedmann
Ausnahme durch CLR oder externen Code ausgelöst – bei Reference zu ReportPro2
Jörg,
The X# macro compiler is a bit more sensitive to duplicate functions.
You can add a so called "macro resolver" to your code to aid the macro compiler to resolve duplicate function names.
This is not very easy, but doable.
To do so you need to create a function with the following prototype:
This function needs to be registered with the runtime:
Whenever the macro compiler does not know which function to choose it will call your function then.
Each of the MemberInfo objects will contain information about the functions found and the Type[] array contains the types of the arguments used in the code.
By returning 1 or 2 you can tell the macro compiler which one to choose.
Any other value will tell the macro compiler that you don't know.
From the MethodInfo you can find a property "DeclaringType" that returns the type where the function was created and from that type you can find the property "Assembly" that returns assembly where it was defined.
The DeclaringType will be a compiler generated Functions class. Something like MyDll.Functions
See https://docs.microsoft.com/en-us/dotnet ... mework-4.8
for more info about methodinfo and the classes that it inherits from.
The SetMacroDuplicatesResolver() function returns the previous value of the resolver.
You may want to save this value and check to see if this is null and when it is not, you may also want to call the old resolver when you don't know which one to choose.
Robert
The X# macro compiler is a bit more sensitive to duplicate functions.
You can add a so called "macro resolver" to your code to aid the macro compiler to resolve duplicate function names.
This is not very easy, but doable.
To do so you need to create a function with the following prototype:
Code: Select all
USING System.Reflection
Function MyResolver( m1 AS MemberInfo, m2 AS MemberInfo,args AS Type[]) AS LONG
// decide which one to use and return either 1 or 2.
RETURN 1
Code: Select all
SetMacroDuplicatesResolver(MyResolver)
Each of the MemberInfo objects will contain information about the functions found and the Type[] array contains the types of the arguments used in the code.
By returning 1 or 2 you can tell the macro compiler which one to choose.
Any other value will tell the macro compiler that you don't know.
From the MethodInfo you can find a property "DeclaringType" that returns the type where the function was created and from that type you can find the property "Assembly" that returns assembly where it was defined.
The DeclaringType will be a compiler generated Functions class. Something like MyDll.Functions
See https://docs.microsoft.com/en-us/dotnet ... mework-4.8
for more info about methodinfo and the classes that it inherits from.
The SetMacroDuplicatesResolver() function returns the previous value of the resolver.
You may want to save this value and check to see if this is null and when it is not, you may also want to call the old resolver when you don't know which one to choose.
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu
Ausnahme durch CLR oder externen Code ausgelöst – bei Reference zu ReportPro2
Hallo Robert,
Danke für die Erklärung. Da wäre ich ja im Leben nicht draufgekommen.
Mal sehen ob ich den Hinweis umsetzen kann ...
Jörg
Danke für die Erklärung. Da wäre ich ja im Leben nicht draufgekommen.
Mal sehen ob ich den Hinweis umsetzen kann ...
Jörg