Как исправить ошибку загрузки из контекста при вызове функции C ++ DLL в приложении C #

Я пытаюсь вызвать функцию C ++ внутри DLL из моего приложения C #. DLL из программы, которая будет установлена ​​на компьютере пользователя, поэтому DLL должна быть загружена во время выполнения. Я получаю следующее исключение:

Помощник по управляемой отладке ‘LoadFromContext’ обнаружил проблему

Дополнительная информация: сборка с именем ‘Client.API’ была загружена
from (путь к файлу dll) с использованием контекста LoadFrom. Использование этого
контекст может привести к неожиданному поведению для сериализации, приведения
и разрешение зависимостей. Почти во всех случаях рекомендуется
контекст LoadFrom следует избегать. Это можно сделать, установив
сборки в глобальном кэше сборок или в базе приложений
каталог и использование Assembly.Load при явной загрузке сборок.

Я не очень понимаю, что означает эта ошибка. И я не знаю, как это исправить в моей ситуации. Я искал в Интернете, но я не нашел много полезной информации.
Это код, с которым я работаю:

[DllImport("dmawin.dll")]
private static extern int LoginDialog(IntPtr pWndParent, string pStrTitle,
uint pFlags, [MarshalAs(UnmanagedType.LPWStr)] ref StringBuilder pStrDataSource,
int pDSLength, string pStrUsername, string pStrPassword, string pStrSchema);private bool Login(string pDataSource, string pLoginName,
string pPassword, string pScheme)
{
private const int MAX_DB_NAME = 256;
IntPtr handle = ParentForm.Handle;
var sb = new StringBuilder(pDataSource, MAX_DB_NAME);

//function call
LoginDialog(handle, null, flags, ref sb, MAX_DB_NAME, pLoginName,
pPassword, pScheme);
}

1

Решение

Исправьте настройки отладчика, это предупреждение должно быть отключено от. Этот MDA обычно предназначен только для предупреждения программиста, когда он не собирался использовать Assembly.LoadFrom (). Так как вы не можете ничего с этим поделать, кроме своего кода, у вас очень мало причин обращать на это внимание.

В VS2015 используйте «Отладка»> «Windows»> «Настройки исключений». В более ранних версиях используйте Debug> Exceptions. Разверните «Ассистенты управляемой отладки» и снимите флажок «LoadFromContext». Если по какой-то причине у вас все отмечено, то вы хотите сбросить все настройки, дважды щелкните по верхнему узлу

FWIW, используемая вами библиотека уже написана на языке .NET. С большой вероятностью вы захотите поговорить с автором и спросить, поддерживает ли он управляемый интерфейс, чтобы вам не приходилось использовать [DllImport].

1

Другие решения

То, что вы видите, не является исключением. Это просто предупреждение отладчика. Если вы запустите приложение без отладки, оно вообще не появится. Внутри Visual Studio в настройках обработки исключений отладчика вы можете отключить эти типы предупреждений.

1

По вопросам рекламы [email protected]