2

我对 C# 和 Visual Studio 还很陌生,所以我可能在这里遗漏了一些基本的东西,但我找不到任何解决方案。

我得到了 2 个 NET 项目,其中一个是可执行一些操作的可执行文件,但主要的代码是:

object tempInstance = Activator.CreateInstance(Type.GetTypeFromProgID(progID));

另一个项目只是创建了一个 .dll 文件,我已通过右键单击“引用”并选择“添加引用...”将其添加到 Visual Studio 中的可执行文件中,然后浏览其他项目的 .dll 文件创建的。

但是,我无法更改 .dll 文件中的 progId。如果我将其保留为“NETLoginDevice.DemoLoginDevice”,它就可以工作。我还可以更改第一部分并让“TestMan.DemoLoginDevice”工作。但是,我想将其更改为“TestMan.Receiver”之类的内容,但可执行代码在尝试从该 progId 获取类型时返回 null。我需要改变什么才能让它工作吗?

我在项目的任何地方都找不到对“DemoLoginDevice”的任何其他引用,并且我定义的类的顶部看起来像:

[ComVisible(true)]
[ProgId("TestMan.Receiver")]
[Guid("6C163B59-CF0F-4C69-B8A6-8D3DBED2640E")]
public class Receiver: IAuthenticationNET, IAuthenticationNETLoginResult

似乎我应该能够将 progID 设置为“TestMan.Receiver”并且可执行代码应该可以工作,但是我得到了 ArgumentNullException。

编辑:我仍然无法让 Type.GetTypeFromProgID() 工作,但如果我这样做:

Type.getTypeFromCLSID(new Guid("6C163B59-CF0F-4C69-B8A6-8D3DBED2640E"));

我可以在调试器中看到它返回一个

{Name = "Receiver" FullName = "TestMan.Receiver"}

就像我做的那样:

Type.getFromProgId("TestMan.DemoLoginDevice");

我仍然不明白“DemoLoginDevice”的来源以及“TestMan.Receiver”为什么不起作用。我也尝试过更改 Guid(以防事情相互覆盖),但没有任何运气。

4

0 回答 0