25using System.Diagnostics;
43 public static nint
GetFuncPtr(
object callerID,
string clazz,
string name,
string sig)
45#if FIRST_PASS || IMPORTER || EXPORTER
46 throw new NotImplementedException();
49 var argl =
sizeof(nint) +
sizeof(nint);
50 for (
int i = 1; sig[i] !=
')'; i++)
56 while (sig[++i] ==
'[') ;
58 while (sig[++i] !=
';') ;
62 while (sig[++i] !=
';') ;
84 var mangledSig =
JniMangle(sig.Substring(1, sig.IndexOf(
')') - 1));
85 var methodName = $
"Java_{mangledClass}_{mangledName}";
86 var longMethodName = $
"Java_{mangledClass}_{mangledName}__{mangledSig}";
87 JVM.Context.
Diagnostics.
GenericJniInfo($
"Linking native method: {clazz}.{name}{sig}, classLoader = {loader}, methodName = {methodName}, longMethodName = {longMethodName}, argl = {argl}");
91 foreach (var p
in loader.GetNativeLibraries())
93 if (LibJvm.Instance.JVM_FindLibraryEntry(p,
NativeLibrary.MangleExportName(methodName, argl)) is nint h1 and not 0)
99 if (LibJvm.Instance.JVM_FindLibraryEntry(p,
NativeLibrary.MangleExportName(longMethodName, argl)) is nint h2 and not 0)
107 var msg = $
"{clazz}.{name}{sig}";
109 throw new java.
lang.UnsatisfiedLinkError(msg);
115 var sb =
new ValueStringBuilder(name.Length + 8);
117 foreach (var c
in name)
133 case >=
'0' and <=
'9':
134 case >=
'a' and <=
'z':
135 case >=
'A' and <=
'Z':
139 sb.Append($
"_0{(int)c:x4}");
144 return sb.ToString();
147#if FIRST_PASS || IMPORTER || EXPORTER
162#if FIRST_PASS || IMPORTER || EXPORTER
163 throw new NotImplementedException();
167 var prev =
env.classLoader;
168 env.classLoader = loader;
178#if FIRST_PASS || IMPORTER || EXPORTER
179 throw new NotImplementedException();
181 env.classLoader = prev;
193#if FIRST_PASS || IMPORTER || EXPORTER
194 throw new NotImplementedException();
196 env = JNIEnvContext.Current ??
JNIEnv.CreateJNIEnv(
JVM.Context)->GetContext();
198 return (nint)(
void*)
env.pJNIEnv;
207#if FIRST_PASS || IMPORTER || EXPORTER
208 throw new NotImplementedException();
211 JVM.ThrowPendingException();
217#if FIRST_PASS || IMPORTER || EXPORTER
218 throw new NotImplementedException();
220 return env.MakeLocalRef(obj);
226#if FIRST_PASS || IMPORTER || EXPORTER
227 throw new NotImplementedException();
static readonly object SyncRoot
Main state of the running JVM.
Provides methods to load libraries from standard .NET search locations. This class is not used to loa...
Runtime support for a class loader.
IDiagnosticHandler Diagnostics
Gets the IDiagnosticHandler where events should be sent.
void GenericJniError(string arg0)
The 'GenericJniError' diagnostic.
void GenericJniInfo(string arg0)
The 'GenericJniInfo' diagnostic.
static nint GetFuncPtr(object callerID, string clazz, string name, string sig)
Invoked by managed code to acquire a function pointer to a native JNI method.
readonly object UnwrapLocalRef(nint p)
readonly void Leave()
Leaves a JNIFrame previously entered.
readonly nint MakeLocalRef(object obj)
JNIEnvContext.FrameState prevFrameState
nint Enter(object callerID)
Enters the JNIFrame with a specified ikvm.@internal.CallerID in scope.
static string JniMangle(string name)