本文整理汇总了C#中ClassLoaderWrapper.GetNativeLibraries方法的典型用法代码示例。如果您正苦于以下问题:C# ClassLoaderWrapper.GetNativeLibraries方法的具体用法?C# ClassLoaderWrapper.GetNativeLibraries怎么用?C# ClassLoaderWrapper.GetNativeLibraries使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ClassLoaderWrapper
的用法示例。
在下文中一共展示了ClassLoaderWrapper.GetNativeLibraries方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: LoadLibrary
private unsafe static long LoadLibrary(string filename, ClassLoaderWrapper loader)
{
Tracer.Info(Tracer.Jni, "loadLibrary: {0}, class loader: {1}", filename, loader);
lock(JniLock)
{
IntPtr p = ikvm_LoadLibrary(filename);
if(p == IntPtr.Zero)
{
Tracer.Info(Tracer.Jni, "Library not found: {0}", filename);
return 0;
}
try
{
foreach(IntPtr tmp in loader.GetNativeLibraries())
{
if(tmp == p)
{
// the library was already loaded by the current class loader,
// no need to do anything
ikvm_FreeLibrary(p);
Tracer.Warning(Tracer.Jni, "Library was already loaded: {0}", filename);
return p.ToInt64();
}
}
if(nativeLibraries.Contains(p))
{
string msg = string.Format("Native library {0} already loaded in another classloader", filename);
Tracer.Error(Tracer.Jni, "UnsatisfiedLinkError: {0}", msg);
throw new java.lang.UnsatisfiedLinkError(msg);
}
Tracer.Info(Tracer.Jni, "Library loaded: {0}, handle = 0x{1:X}", filename, p.ToInt64());
IntPtr onload = ikvm_GetProcAddress(p, "JNI_OnLoad", IntPtr.Size * 2);
if(onload != IntPtr.Zero)
{
Tracer.Info(Tracer.Jni, "Calling JNI_OnLoad on: {0}", filename);
JNI.Frame f = new JNI.Frame();
int version;
ClassLoaderWrapper prevLoader = f.Enter(loader);
try
{
// TODO on Whidbey we should be able to use Marshal.GetDelegateForFunctionPointer to call OnLoad
version = ikvm_CallOnLoad(onload, JavaVM.pJavaVM, null);
Tracer.Info(Tracer.Jni, "JNI_OnLoad returned: 0x{0:X8}", version);
}
finally
{
f.Leave(prevLoader);
}
if(!JNI.IsSupportedJniVersion(version))
{
string msg = string.Format("Unsupported JNI version 0x{0:X} required by {1}", version, filename);
Tracer.Error(Tracer.Jni, "UnsatisfiedLinkError: {0}", msg);
throw new java.lang.UnsatisfiedLinkError(msg);
}
}
nativeLibraries.Add(p);
loader.RegisterNativeLibrary(p);
return p.ToInt64();
}
catch
{
ikvm_FreeLibrary(p);
throw;
}
}
}