gpt4 book ai didi

c# - 如何对先前的 InvokeMember 结果调用 InvokeMember?

转载 作者:行者123 更新时间:2023-11-30 22:32:42 33 4
gpt4 key购买 nike

我必须在 C# 中实现 COM 操作。 COM 对象是来自 Evidian 的 SSOEngine。

我有 VB.NET 示例。我必须翻译成 C#。

在 VB.NET 中,我可以使用该代码完成这项工作:

Dim oSSO, oApp
oSSO = CreateObject("SSOEngine.SSOEngine")
oApp = oSSO.GetApplication2("myApp", "MyPassword", 0)
return oApp.LoginId(0)

在 C# 中,我执行以下代码

System.Type objTypeSSOEngine = Type.GetTypeFromProgID("SSOEngine.SSOEngine");
object instSSOEngine = Activator.CreateInstance(objTypeSSOEngine);
object o = objTypeSSOEngine.InvokeMember("GetApplication2",
System.Reflection.BindingFlags.InvokeMethod, null,
instSSOEngine, new object[] { "myApp", "MyPassword", 0 });

我在 oApp.LoginId(0) 行被阻止...您知道如何对 o 对象执行另一个 InvokeMember 吗?

最佳答案

.NET 2.0 -> 3.5

如果您知道从 GetApplication2 调用返回的对象的类型,只需将其转换为已知类型并调用您需要的函数即可。

object o = objTypeSSOEngine.InvokeMember("GetApplication2",
System.Reflection.BindingFlags.InvokeMethod, null,
instSSOEngine, new object[] { "myApp", "MyPassword", 0 });

KnownType tp = o as KnownType;
if(tp!=null)
tp .LoginId(0)

.NET 4.0

使用dynamic

一个伪代码

System.Type objTypeSSOEngine = Type.GetTypeFromProgID("SSOEngine.SSOEngine");
dynamic instSSOEngine = Activator.CreateInstance(objTypeSSOEngine);
dynamic oApp = instSSOEngine.GetApplication2("myApp", "MyPassword", 0)
return oApp.LoginId(0)

像这样的……

希望这对您有所帮助。

关于c# - 如何对先前的 InvokeMember 结果调用 InvokeMember?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8618053/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com