首页 新闻 搜索 专区 学院

为什么使用dynamic 时提示"值不在范围"但是确实有该方法的

0
悬赏园豆:10 [已解决问题] 解决于 2014-05-09 17:41
                 CAcroPDDoc pdDoc = (CAcroPDDoc)g_AVDoc.GetPDDoc();
                 Object jsObj = pdDoc.GetJSObject();
                 object[] getTemplateParam = { "Templates:1" };
                 Type T = jsObj.GetType();
                 template = T.InvokeMember(
                        "getTemplate",
                        BindingFlags.InvokeMethod |
                        BindingFlags.Public |
                        BindingFlags.Instance,
                        null, jsObj, getTemplateParam);
                  

如上所示

jsObj中存在getTemplate这个方法,用上面的方式调用是没有问题的.
但是我想使用dynamic调用却提示值不在范围.
                 CAcroPDDoc pdDoc = (CAcroPDDoc)g_AVDoc.GetPDDoc();
                 dynamic jsObj = pdDoc.GetJSObject();
   object[] getTemplateParam = { "Templates:1" };
                 template =jsObj .getTemplate(getTemplateParam );
              

不解中,求解

问题补充:

以下代码引用自http://msdn.microsoft.com/zh-cn/magazine/gg598922.aspx

  1.  
  2.           object calc = GetCalculator();
  3. Type calcType = calc.GetType();
  4. object res = calcType.InvokeMember(
  5.   "Add", BindingFlags.InvokeMethod, 
  6.   nullnew object[] { 1020 });
  7. int sum = Convert.ToInt32(res);
  8.         

该函数返回一个计算器,但系统在编译时不知道此计算器对象的精确类型。 代码所依赖的唯一事情是此对象应具有 Add 方法。 请注意,此方法无法使用 IntelliSense,因为您以字符串文本的形式提供了方法名称。

使用 dynamic 关键字,代码就很简单了:

  1.  
  2.           dynamic calc = GetCalculator();
  3. int sum = calc.Add(1020);
  4.         
麦枫的主页 麦枫 | 初学一级 | 园豆:37
提问于:2013-05-30 11:31
< >
分享
最佳答案
0

错误的全部信息贴出来看看

收获园豆:10
WuRang | 小虾三级 |园豆:1730 | 2013-05-30 11:53

麦枫 | 园豆:37 (初学一级) | 2013-05-30 12:02

@曾先锋: 看一下错误详细信息,同时看看

 CAcroPDDoc pdDoc = (CAcroPDDoc)g_AVDoc.GetPDDoc();是不是只有一个,
pdDoc.GetJSObject();是否只给一个变量赋值
WuRang | 园豆:1730 (小虾三级) | 2013-05-30 14:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册