我正在尝试从C#应用程序中调用dll中的C ++函数。 dll来自将安装在用户机器上的程序,因此必须在运行时加载dll。我遇到以下异常:
托管调试助手'LoadFromContext'检测到问题 ...
其他信息:已加载名为“Client.API”的程序集 使用LoadFrom上下文从'(path to dll file)'。使用这个 上下文可能导致序列化,转换的意外行为 和依赖性解决。在几乎所有情况下,建议 可以避免LoadFrom上下文。这可以通过安装来完成 全局程序集缓存或ApplicationBase中的程序集 目录并在显式加载程序集时使用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);
}
答案 0 :(得分:1)
你看到的不是例外。它只是调试器显示的警告。如果在没有调试的情况下运行应用程序,则根本不会显示。在Visual Studio中,在调试器的异常处理设置中,您可以禁用这些类型的警告。
答案 1 :(得分:1)
修正您的调试器设置,此警告应该关闭。此MDA通常仅用于在程序员不打算使用Assembly.LoadFrom()时发出警告。既然你无法做任何事情,而不是你的代码,你几乎没有理由去关注它。
在VS2015中使用Debug> Windows>例外设置。在早期版本中,使用Debug>例外。展开托管调试助手并取消勾选" LoadFromContext"。如果由于某种原因勾选了所有内容,则需要重置所有设置,请单击顶部节点两次。
FWIW,你使用的库显然已经用.NET语言编写了。很高的赔率,您将要与作者交谈,并询问他是否支持托管界面,因此您不必使用[DllImport]。