SAP:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“sapfewse.GuiTextField”

菲尔_BHN

我正在尝试使用 c# 与 SAP gui 窗口交互。在此处使用此解决方案:解决方案,我已成功连接到打开的 GUI 窗口。我可以发送命令

frame.Maximize();

正如预期的那样,这将最大化窗口。

当我尝试将一些文本放入文本框中时出现问题。

((GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd")).Text = "InputText";
    //or
    GuiTextField targetField =
    (GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd");
    //or
    GuiTextField targetField =
    (GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd", "GuiTextField");
    targetField.Text = "InputText";

我得到的错误是:

System.InvalidCastException
  HResult=0x80004002
  Message=Unable to cast COM object of type 'System.__ComObject' to interface type 'sapfewse.GuiTextField'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B4D89EE3-6EFD-4F4C-9F42-AD42B71C8EB7}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

如果我改为尝试这个:

var x = session.FindById("wnd[0]/tbar[0]/okcd");

然后我的监视窗口告诉我 x 是 GuiComponent 类型,而不是我希望的 GuiTextField 类型。

这将运行:

GuiComponent targetField = (GuiComponent)session.FindById("wnd[0]/tbar[0]/okcd");

但是 targetField 没有 text 属性。

我需要做什么来解决这个问题?谢谢!

菲尔_BHN

找到了答案,留在这里以防它可以帮助其他人。

看着

GuiComponent targetField = (GuiComponent)session.FindById("wnd[0]/tbar[0]/okcd");

我发现 targetField 有一个 Type 属性:

var tmp = targetField.Type;

结果是 GuiOkCodeField。

所以所需的代码是:

((GuiOkCodeField)session.FindById("wnd[0]/tbar[0]/okcd")).Text= "InputText";

tldr; 使用 ((GuiOkCodeField)session.FindById("wnd[0]/tbar[0]/okcd")).Text= "InputText";

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法将类型为“ System .__ ComObject”的COM对象转换为接口类型为“ EnvDTE.Project”

无法将类型为“ System .__ ComObject”的COM对象转换为接口类型为“ Microsoft.Office.Interop.Excel.Worksheets”

T4MVC:System.InvalidCastException:无法将类型为System .__ ComObject的COM对象转换为接口类型为EnvDTE80.CodeClass2。

如何在vb.net中将类型为“ System .__ ComObject”的COM对象转换为接口类型为“ ESRI.ArcGIS.Carto.FeatureLayer”?

获取CLR对象属性将引发无法转换类型为'System .__ ComObject'的COM对象

运行时错误无法将类型为“ System .__ ComObject”的COM对象转换为类类型为“ System.String”的对象

将继承类型的对象列表转换为新的接口类型列表

Typescript将未知类型转换为接口类型

将具体的实现类型转换为通用接口类型

无法将实例类型转换为实例实现接口的接口类型

无效的类型断言:无法将os.Stdout转换为接口类型io.ReadWriter?

关闭无法隐式转换为通用接口类型的成员的通用接口的类的实例

使用C#和反射将接口类型转换为具体类型

无法将COM对象转换为类类型

将使用URLClassLoader创建的对象转换为接口类型

Swift:从接口类型数组转换为对象数组崩溃

如何将二维地图从Firestore转换为Typescripts接口类型

HandlerFunc(f)如何将函数转换为接口类型?

无法将java.lang.String类型的对象转换为com.mycare.OtherClass类型

将字节数组解组到接口,然后将该接口类型强制转换为struct不起作用?

为什么将StreamReader对象类型转换为IDisposable接口?

Typescript接口类型值转换为联合类型

为什么我不能将对象转换为其接口类型?

在Linq表达式中将对象转换为通用接口类型

无法将类型为“ System.TimeSpan”的对象转换为类型为“ System.IConvertible”的对象

无法将类型为“ System.DBNull”的对象转换为类型为“ System.Byte []”的对象

无法将类型为“ System.Byte []”的对象转换为类型为“ System.String”的对象

无法将java.lang.String类型的对象转换为com.reazon.foodrunner.model.Favorite类型

使用Firebase RecyclerAdapter时,“无法将java.lang.String类型的对象转换为com.android.projectrc.Listing类型”