如何呼叫(调用)另一程序集中的方法

l_kk 2007-06-28 02:34:56
本人最近在学习c#,在MSDN上有这样一篇文章:
http://msdn2.microsoft.com/en-us/library/ms173139(VS.80).aspx
例如有HelloWorldRemote.exe位于c盘
其中的代码逻辑如下:
(我对其增加了一个 method: MyMethod())
namespace HelloWorldRemote
{
public class RemoteObject : System.MarshalByRefObject
{
public RemoteObject()
{
System.Console.WriteLine("Hello, World! (RemoteObject Constructor)");
}
public void MyMethod()//add for test
{
System.Console.WriteLine("called mymethod");
}
}
class Program
{
static void Main()
{
System.Console.WriteLine("Hello, World! (Main method)");
}
}
}


现在另一程序中想调用HelloWorldRemote.exe中的MyMethod,该怎么写呢?
----------------------------------------
在MSDN中只有如下代码,这会触发HelloWorldRemote.RemoteObject调用自己的构造函数。
Assembly newAssembly = Assembly.LoadFrom(@"c:\HelloWorldRemote.exe");

// Instantiate RemoteObject:
newAssembly.CreateInstance("HelloWorldRemote.RemoteObject");

希望大家指点迷津~ 揭帖送分~
...全文
202 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_kk 2007-06-28
  • 打赏
  • 举报
回复
嘿嘿,我的优点很多的,爽快是我的风格~ :)
谢拉!RedGoldFish!
RedGoldFish 2007-06-28
  • 打赏
  • 举报
回复
多谢,LZ爽快人,最近我回答问题经常碰上不结账的,无奈......
l_kk 2007-06-28
  • 打赏
  • 举报
回复
终于结贴成功了~~
l_kk 2007-06-28
  • 打赏
  • 举报
回复
贴子回复次数大于跟给分次数 ?
nic7968 2007-06-28
  • 打赏
  • 举报
回复
记住
RedGoldFish 2007-06-28
  • 打赏
  • 举报
回复
ERPCoder(Most Valuable Player) 那个Remoting的端口号没对上,Server发布在4006上, Client取的是2560, 会报错的.
l_kk 2007-06-28
  • 打赏
  • 举报
回复
thank you RedGoldFish(红金鱼) !!
and also thank you all!
揭帖!
RedGoldFish 2007-06-28
  • 打赏
  • 举报
回复
或者用Reflection也行:

Assembly newAssembly = Assembly.LoadFrom(@"c:\HelloWorldRemote.exe");

// Instantiate RemoteObject,
Object myWorld = newAssembly.CreateInstance("HelloWorldRemote.RemoteObject")

Type type = myWorld.GetType();

System.Reflection.MethodInfo.MethodInfo mi = type.GetMethod("MyMethod");

mi.Invoke(myWorld, null);
ERPCoder 2007-06-28
  • 打赏
  • 举报
回复
你那种用法是"反射".
ERPCoder 2007-06-28
  • 打赏
  • 举报
回复
好像是想用Remoting.

参考如下:
[Serializable]
public class Calculator : MarshalByRefObject
{
public Calculator()
{

}

public int Sum(int x, int y)
{
return x + y;
}
}

class Client
{
static void Main(string[] args)
{
Calculator calcu = (Calculator)Activator.GetObject(typeof(Calculator), "tcp://localhost:2560/Calculator.rem");

int sum = calcu.Sum(5, 6);
Console.WriteLine(sum);
}
}

class Server
{
static void Main(string[] args)
{
ChannelServices.RegisterChannel(new TcpChannel(4006), false);

RemotingConfiguration.RegisterWellKnownServiceType(typeof(Calculator)
, "Calculator.rem", WellKnownObjectMode.Singleton);

Console.WriteLine("运行中...");
Console.ReadLine();
}
}

Calculator就相当于你的HelloWorldRemote类;
Client就是一个要调用的类;
Server是HelloWorldRemote对象的宿主服务器.
l_kk 2007-06-28
  • 打赏
  • 举报
回复
wzd24(牧野),
能说的具体点么?刚接触,没有方向~谢谢了
wzd24 2007-06-28
  • 打赏
  • 举报
回复
用Remoting来调用!

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧