急!高分求解,关于调用COM+组件方法的问题
客户端:
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




