我意识到这可能很难解释,所以让我先从Windows中使用一个例子; keBugCheckEx()点。
我如何制作一个包含在一个程序中的方法,但是当从另一个程序执行时,会影响它所在的程序。例如,在主程序中,你可以:
public static void Panic(uint errCode)
{
System.Windows.MessageBox.Show("Function Panic() was called with error code: "
+ errCode);
Application.Exit();
}
然后,在第二个程序中,您可以调用该方法,例如
public static void Main(string[] args)
{
Foo.Panic(0x3C);
}
我将如何制作它,而不是第二个程序中显示的MessageBox,它出现在第一个程序中?对不起,如果没有很好的解释。
答案 0 :(得分:0)
你提到了两个独立的“程序”。你的意思是两个单独的可执行文件?我想你的意思是你会有一个项目,它更像是一个封装了某些功能/验证的类库。你引用“Foo”但没有其他声明......它是你整个应用程序“解决方案”中的第二个项目,并作为#using主要部分包含在内。只要在整个主UI线程中调用它,辅助类库应该能够做一个简单的消息框。
您可能需要详细说明/更新您的问题。
我想最后的解决方案是反馈注释,让类只在类中有一个方法,除了将字符串消息BACK传递给调用源之外什么都不做。从那以后,任何调用它的应用程序都可以获取消息并将其显示在自己的UI线程中。
答案 1 :(得分:0)
一个进程影响另一个进程的能力,由于非常好的理由,受到大多数操作系统的严格控制。一个程序可以使另一个程序执行不遵循该程序的正常逻辑路径的指令,这可能会导致不良行为,而这些行为是病毒的标志。
话虽如此,有两种方法可以构建这两个过程以实现进程间通信;进程通常必须相互通信,并且通常一个程序可以“告诉”另一个程序执行代码,但实际做出的决定是由程序完成的。对于两个也可以独立的程序,像命名管道这样的东西允许一个进程将数据输入另一个可以解释为命令的进程。
如果这两个进程都是.NET,或者包含代码的库是COM兼容的,则只需在调用进程中执行其他程序的代码即可。您只需引用外部库,如果外部使用者可以看到Foo作为类,则可以实例化一个并调用其方法。这将是从您自己的不同进程执行行为的正常方式;但是,你不能告诉一个不同的进程用Foo调用Panic(),但不能完全执行其中的所有内容(包括在拥有进程的UI线程的上下文中显示对话框)