CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

急!高分求解,关于调用COM+组件方法的问题

楼主by92419()2004-04-02 01:40:15 在 .NET技术 / C# 提问

客户端:  
  public   long   fun()  
  {  
  Type   t   =   Type.GetTypeFromProgID("ComServer.Com");  
  try  
  {  
          object   obj   =   Activator.CreateInstance(t);  
          DataSet   a   =   objClient.DataEntity;     //获取一个已经有内容的DataSet  
          object[]   args   =   new   object[]{a};  
          return   (long)t.InvokeMember("InsertDataSet",BindingFlags.InvokeMethod,null,obj,args,null);  
  catch(Exception   e)  
  {  
      MessageBox.Show(e.TargetSite   +   "|"   +   e.Message   +   "|"   +   e.Source   +   "|"   +   e.StackTrace);  
    return   -2;  
  }  
  }  
   
   
  COM+组件:已经关联.snk文件,里面有两个类,分别取名COM和COM2  
   
  using   System;  
  using   System.EnterpriseServices;  
  using   System.Runtime.InteropServices;  
   
  namespace   ComServer  
  {  
  ///   <summary>  
  ///   RegisterTran   的摘要说明。  
  ///   </summary>  
  ///    
  [JustInTimeActivation(true)]  
  [ClassInterface(ClassInterfaceType.AutoDual)]  
                    [assembly:   ApplicationActivation(ActivationOption.Server)]  
                    [assembly:   ApplicationName("ComServer")]  
  public   class   COM:   ServicedComponent  
  {  
   
  public   COM()  
  {  
  }  
   
  public   String   GetString()  
  {  
  return   "this   is   a   String";  
  }  
   
  public   long   GetLong()  
  {  
  return   8888;  
  }  
   
  public   long   InsertDataSet(DataSet   DataEntity)  
  {  
                                                  return   DataEntity.Tables[0].Rows.Count;  
  }  
  }  
   
   
  问题是:在调用COM+组件的方法时,调用GetString()和GetLong()方法正常,但是调用InsertDataSet方法,系统报错,错误信息如下:  
  ?   e.Message    
  "调用的目标发生了异常。"  
  ?   e.StackTrace    
  "       at   System.Reflection.RuntimeMethodInfo.InternalInvoke(Object   obj,   BindingFlags   invokeAttr,   Binder   binder,   Object[]   parameters,   CultureInfo   culture,   Boolean   isBinderDefault,   Assembly   caller,   Boolean   verifyAccess)\r\n       at   System.Reflection.RuntimeMethodInfo.InternalInvoke(Object   obj,   BindingFlags   invokeAttr,   Binder   binder,   Object[]   parameters,   CultureInfo   culture,   Boolean   verifyAccess)\r\n       at   System.Reflection.RuntimeMethodInfo.Invoke(Object   obj,   BindingFlags   invokeAttr,   Binder   binder,   Object[]   parameters,   CultureInfo   culture)\r\n       at   System.RuntimeType.InvokeMember(String   name,   BindingFlags   invokeAttr,   Binder   binder,   Object   target,   Object[]   args,   ParameterModifier[]   modifiers,   CultureInfo   culture,   String[]   namedParameters)\r\n       at   System.Type.InvokeMember(String   name,   BindingFlags   invokeAttr,   Binder   binder,   Object   target,   Object[]   args,   CultureInfo   culture)\r\n       at   HISClient.BusinessFaced.clsProxy.InsertDataSet()   in   d:\\vs.netcode\\his\\hisv11\\his_client\\businessfaced\\clsproxy.cs:l  
  ine   150"  
  ?   e.InnerException    
  {"未将对象引用设置到对象的实例。"   }  
          [System.NullReferenceException]:   {"未将对象引用设置到对象的实例。"   }  
          System.Object:   {System.NullReferenceException}  
          _className:   "System.NullReferenceException"  
          _COMPlusExceptionCode:   -532459699  
          _exceptionMethod:   <未定义的值>  
          _exceptionMethodString:   "8\0InsertDataSet\0COM2,   Version=1.1.1.0,   Culture=neutral,   PublicKeyToken=a45b55f364ab186a\0ComServer.COM\0Void   InsertDataSet(System.Data.DataSet)"  
          _helpURL:   null  
          _HResult:   -2147467261  
          _innerException:   {   }  
          _message:   "未将对象引用设置到对象的实例。"  
          _remoteStackIndex:   1  
          _remoteStackTraceString:   "\nServer   stack   trace:   \n       at   ComServer.OPRegisterTran.InsertRegister(DataSet   DataEntity)\r\n       at   System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(MethodBase   mb,   Object[]   args,   Object   server,   Int32   methodPtr,   Boolean   fExecuteInContext,   Object[]&   outArgs)\r\n       at   System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage   msg,   Int32   methodPtr,   Boolean   fExecuteInContext)\n\nException   rethrown   at   [0]:   \n"  
          _source:   "OPRegister"  
          _stackTrace:   {System.Array}  
          _stackTraceString:   null  
          _xcode:   0  
          _xptrs:   0  
          HelpLink:   null  
          HResult:   -2147467261  
          InnerException:   {   }  
          Message:   "未将对象引用设置到对象的实例。"  
          Source:   "OPRegister"  
          StackTrace:   "\nServer   stack   trace:   \n       at   ComServer.OPRegisterTran.InsertRegister(DataSet   DataEntity)\r\n       at   System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(MethodBase   mb,   Object[]   args,   Object   server,   Int32   methodPtr,   Boolean   fExecuteInContext,   Object[]&   outArgs)\r\n       at   System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage   msg,   Int32   methodPtr,   Boolean   fExecuteInContext)\n\nException   rethrown   at   [0]:   \n       at   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage   reqMsg,   IMessage   retMsg)\r\n       at   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&   msgData,   Int32   type)\r\n       at   ComServer.COM.InsertDataSet(DataSet   DataEntity)"  
          TargetSite:   {System.Reflection.RuntimeMethodInfo} 问题点数:100、回复次数:5Top

1 楼Montaque(每天回答两个问题)回复于 2004-04-02 07:43:34 得分 40

public   long   InsertDataSet(DataSet   DataEntity)  
  {  
                                                  Debug.ASSERT(DataEntity.Tables.Count>=1);  
                                                  return   DataEntity.Tables[0].Rows.Count;  
  }  
  Top

2 楼by92419()回复于 2004-04-02 13:13:35 得分 0

自己顶,各位多帮忙Top

3 楼liuyu202(学无止境)回复于 2004-04-02 15:01:03 得分 20

com+组件比较难做啊!  
   
  关注!Top

4 楼sunruping(孙茹苹)回复于 2004-04-02 21:55:56 得分 20

com+组件比较难做啊!没做过。Top

5 楼riffleliu(流水)回复于 2004-04-03 09:30:55 得分 20

幫你頂一下!Top

相关问题

  • 高分求解,asp调用组件得问题
  • 高人求解:C#里调用VC组件,它们之间交互问题
  • 调用组件?
  • 高分求解:如何在.net组件里调用web.config里的数据库连接字符串
  • 怎样调用TChart类组件的打印预览方法?
  • Jaguar3.6中调用组件方法存在的问题
  • 采用CoCreateInstanceEx创建的组件的方法怎么调用?
  • 请问DLL中调用COM+组件中的方法吗?
  • 怎样调用(引用)Dll组件里的方法,变量
  • 高分求教:用#import方法调用com组件

关键词

  • 组件
  • runtime
  • null
  • 调用
  • insertdataset
  • binder
  • dataentity
  • invokeattr
  • comserver
  • runtimemethodinfo

得分解答快速导航

  • 帖主:by92419
  • Montaque
  • liuyu202
  • sunruping
  • riffleliu

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo