You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[CustomHostClr Sample doesn't work with returning values]
I worked through this sample core/hosting/src. There is a missing sample for invocation when some value retuned from the managed side via pre-defined buffer.
I tried to add this sample myself but it doesn't seem to work.
On the native side (in nativehost.cpp line ~190) added:
public delegate void CustomEntryPointReturningDelegate(IntPtr someptr, StringBuilder res);
public static void CustomEntryPointReturning(IntPtr someptr, StringBuilder res)
{
string message = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? Marshal.PtrToStringUni(someptr)
: Marshal.PtrToStringUTF8(someptr);
Console.WriteLine($"Hello, world! from {nameof(CustomEntryPointReturning)} in {nameof(Lib)}");
Console.WriteLine($"Passed-in string: {message}");
Console.WriteLine($"the buffer on the managed side: {res.ToString()}");
res.Clear();
res.Append("some returned text");
Console.WriteLine($"the buffer on the managed side: {res.ToString()}");
}
It outputs:
Hello, world! from CustomEntryPointReturning in Lib
Passed-in string: some data
the buffer on the managed side: s
the buffer on the managed side: some returned text
returned buffer:
Please, add this kind of example I sketch above (with some fixes required) into the sample.
UPDATE:
To fix reported behaviour
On the native side (in nativehost.cpp line ~190) added:
Note the change of type for out_res pointer from wchat_t to char. And then it works (the output is below):
Hello, world! from CustomEntryPointReturning in Lib
Passed-in string: some data
the buffer on the managed side: some init data
the buffer on the managed side: some returned text
returned buffer: some returned text
It's strange that marshaled back string is 8-bit instead of 16-bit. If you let me know I'll create issue in more relevant repo about this possible CLR marshaling bug.
Issue metadata
Issue type: sample-update
The text was updated successfully, but these errors were encountered:
Also add a small remark as a comment: this example IMHO is very important because returning values via pre-created buffer is very often used idiom. Actually this is the only way(?) to return a string from managed side to native. So without this kindly requested addition the sample is incomplete. Thank you in advance!
[CustomHostClr Sample doesn't work with returning values]
I worked through this sample core/hosting/src. There is a missing sample for invocation when some value retuned from the managed side via pre-defined buffer.
I tried to add this sample myself but it doesn't seem to work.
On the native side (in nativehost.cpp line ~190) added:
In the Lib.cs I added:
It outputs:
Please, add this kind of example I sketch above (with some fixes required) into the sample.
UPDATE:
To fix reported behaviour
On the native side (in nativehost.cpp line ~190) added:
Note the change of type for out_res pointer from wchat_t to char. And then it works (the output is below):
It's strange that marshaled back string is 8-bit instead of 16-bit. If you let me know I'll create issue in more relevant repo about this possible CLR marshaling bug.
Issue metadata
The text was updated successfully, but these errors were encountered: