首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对之前的InvokeMember结果执行InvokeMember操作?

如何对之前的InvokeMember结果执行InvokeMember操作?
EN

Stack Overflow用户
提问于 2011-12-24 00:00:24
回答 3查看 517关注 0票数 2

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

我有VB.NET样本。我必须翻译成C#。

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

代码语言:javascript
复制
Dim oSSO, oApp
oSSO = CreateObject("SSOEngine.SSOEngine")
oApp = oSSO.GetApplication2("myApp", "MyPassword", 0)
return oApp.LoginId(0)

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

代码语言:javascript
复制
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吗?

EN

回答 3

Stack Overflow用户

发布于 2011-12-24 00:12:18

如果您使用的是.net 4,则可以使用dynamics

代码语言:javascript
复制
System.Type objTypeSSOEngine = Type.GetTypeFromProgID("SSOEngine.SSOEngine");
dynamic instSSOEngine = Activator.CreateInstance(objTypeSSOEngine);
dynamic oApp = objTypeSSOEngine.GetApplication2("myApp", "MyPassword", 0 );
return oApp.LoginId(0);

如果没有,您可以添加COM引用( visual Studio中的add reference -> COM ),Visual Studio将为您生成具有适当类和接口的托管中间动态链接库

希望这能有所帮助

票数 1
EN

Stack Overflow用户

发布于 2011-12-24 00:14:14

.NET 2.0 -> 3.5

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

代码语言:javascript
复制
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

伪代码

代码语言:javascript
复制
System.Type objTypeSSOEngine = Type.GetTypeFromProgID("SSOEngine.SSOEngine");
dynamic instSSOEngine = Activator.CreateInstance(objTypeSSOEngine);
dynamic oApp = instSSOEngine.GetApplication2("myApp", "MyPassword", 0)
return oApp.LoginId(0)

就像这样..。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2011-12-24 00:14:17

我推荐使用动态类型。(MSDN)

您可以将任何对象强制转换为此类型,并且不需要使用反射。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8618053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档