Родной класс методов выглядит следующим образомНевозможно загрузитьLibrary32.dll. При вызове из WCF службы
static class NativeMethods
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);
}
Загрузка DLL, из локального пути использования app.config
IntPtr pDll = NativeMethods.LoadLibrary(System.Configuration.ConfigurationManager.AppSettings["MyDll"]);
Эти методы реализованы внутри библиотеки классов и может быть вызвана из приложения форм Windows, а также службы WCF.
Когда мы вызываем вышеуказанный метод из форм Win, он отлично работает. Ниже приведен снимок.
Когда мы вызываем вышеуказанный метод из веб-службы WCF, он не может загрузить DLL, но также не вызывает никаких ошибок. Ниже приведен снимок.
Мы проверили, есть ли проблема с разрешениями, но это не помогло.
Любые предложения по этому вопросу?
Вы не загружаете 'kernel32.dll'. Вы загружаете 'System.Configuration.ConfigurationManager.AppSettings [" MyDll "]'. Затем выполните некоторые отладки. Начните с чтения документации «LoadLibrary». Это говорит о том, как обрабатываются ошибки. Если возвращается «NULL», это означает, что функция не удалась, и вам нужно вызвать «GetLastError», чтобы узнать, почему. Для p/invoke вам нужно использовать 'SetLastError = true' и' Marshal.GetLastWin32Error() 'или' throw new Win32Exception(); 'вам нужно знать значение' System.Configuration.ConfigurationManager.AppSettings [ MyDll "]' также. Опять же, выполните некоторую отладку. –
System.Configuration.ConfigurationManager.AppSettings ["MyDll"] содержит значение. Я проверил все возможные основные ошибки, но не смог найти ответ. –
Вы не сделали то, что я описал –