Hi Rick,
In the past I used the wwDotNetBridge a couple of times, thanks again for that it has been a lifesaver, and I was looking to change some of my dll's to .Net Core. When I run the dotnetcode.prg, in the examples directory, I get the error regarding the loading of the CLR instance on CREATEOBJECT("wwDotnetCoreBridge") (using the Framework version, wwDotnetBridge, works fine).
When I step into the code the line : lcRuntimePath = this.GetDotnetCoreRuntimeFolder(this.cRuntimeFolder) returns "C:\Program Files (x86)\dotnet\shared\Microsoft.NETCore.App\5.0.1" and the line : lnDispHandle = CoreClrCreateInstanceFrom(lcRuntimePath,lcVersion,@lcError,@lnSize) has lcVersion = "7.9.0.0" but returns a handle of 0.
Any idea whats going wrong?
Thanks in advance for any suggestions,
Guillaume
Not sure. I need to look at it again with .NET Core 5. This Core support is experimental at this point...
If you're building .NET components for use with FoxPro you'll be better off using full framework rather than Core. It'll be more reliable and built-in - otherwise you'll have runtime dependencies that might not be there (ie. .NET Core 5.0 not installed).
+++ Rick ---
Hi Rick,
Thanks for the quick reply.
Would like to use the framework version but I have to call a dll which is only available in Core version. I have earlier version of Core runtimes, 3.0 and 3.1, installed on the machine but it seems that the code always looks for the latest installed version.
For the moment I will try to develop a work-around.
Thanks again,
Guillaume
3.x assemblies will work under .NET Core 5.0 it's backwards compatible. But not the other way around (for obvious reasons).
Honestly I haven't looked at that code since 5.0 released so not sure whether anything has changed in the requirements etc. I have to take a look.
You can explicitly specify the runtime by providing the runtime folder in the object creation.
************************************************************************
* wwDotnetBridge :: Init
****************************************
*** Function: Initializes the .NET runtime inside of FoxPro
*** Assume: Calls Load() to actual perform load operation
*** Pass: lcRuntimeFolder - specific .NET Version or
*** Full Runtime Path: <full path>
*** Version only; 2.2.5, 2.1.4, 3.0.1
*** Partial Version: 2.2 2.1 3.0
*** llUseCom - if .T. loads .NET Bridge via
*** plain COM interop rather than
*** hosting .NET runtime itself.
*** If you do COM
*** Return: nothing
************************************************************************
FUNCTION Init(lcRuntimeFolder)
Maybe try with 3.1 runtime folder and see if that works in case something has changed.
+++ Rick ---
Thank for letting me know. I'll take a look at this to see why the Core 5.x runtime won't work. I suspect because it's not finding the runtime correctly perhaps.
This is one of the reasons why I'm so hesitant to recommend using any .NET Core interfaces if it can be avoided. Getting the versions matched up is going to be a PITA. Your app will be responsible for determining whether the right runtime(s) are installed which sucks (it's like the bad old days of .NET Framework). It's one thing for a full application, but crappy for a support component.
+++ Rick ---