【发布时间】:2017-05-24 08:18:32
【问题描述】:
我是 clr / cli 和 C# 的新手。我的 C# 项目中有一个 clr / cli 库。我想动态加载它并在 C# 中访问其类的功能。有人可以提供一些例子或正确的方法吗?
这是我在 Clr/cli 库中的类声明头文件
namespace ManagedLibDarkClient {
public ref class AccountHandler
{
public:
AccountHandler()
{
}
static bool RegisterAccnt(String^ accountID, String^ authCode);
};
}
请在下面找到我尝试访问它的 C# 类的函数:--
private void RegisterWindow_ValidateEvent(object sender, ValidateEventArgs e)
{
Assembly assembly = Assembly.Loadfile("C:\\darkmailWindows\\darkmailwindows\\Dependencies\\ManagedLibDarkMail\\Lib\\ManagedLibDarkClient.dll");
if (assembly != null)
{
Type type = assembly.GetType("AccountHandler");
var obj = Activator.CreateInstance(type);
if (obj != null)
{
string[] args = { e.AccntInfo.AccntName, e.AccntInfo.AuthCode };
type.InvokeMember("RegisterAccnt", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, args);
}
else
MessageBox.Show("Unable to laod object");
}
else
MessageBox.Show("unable to load assembly");
}
}
在此示例中,我面临 2 个问题:- 1- LoadFile 挂起并且没有返回任何东西。 2- 我不知道如何获取我的 clr / cli 函数的返回值。
在这里,我想再提一件事。如果我静态链接它们,我可以访问 clr / cli。但我必须动态加载它。这对我来说是至关重要的要求。
【问题讨论】:
-
听起来好像有死锁。如果你在你的 DllMain 中设置一个断点,它会被击中吗?如果您逐步完成,DllMain 是否完成?如果您让它运行直到挂起然后暂停执行,您的任何(本机)代码是否在堆栈(该进程中的任何线程)上?
标签: c# .net clr managed-c++