当前位置:编程学习 > C#/ASP.NET >>

【50分,不够可另贴加分】题目不好说,看内容吧

我先写了一个程序(甲),运行后会输出一个整数

然后又写了一个程序(乙)

我把甲作为资源文件添加到乙中,当我运行乙后,会把甲释放出来,并且给它传递一个整数值

当我运行从乙中生成的甲时,输出的整数为乙所传递的整数

请问甲、乙程序该怎么写? --------------------编程问答-------------------- 路过…… --------------------编程问答-------------------- 远程调用,用net Remoting或者web sevices --------------------编程问答-------------------- 有点乱。。。不太懂, --------------------编程问答-------------------- mark --------------------编程问答-------------------- 命令行参数不行? --------------------编程问答-------------------- 个人觉得把甲输出的数存在个文本文件中
然后乙去读这个文本文件,把数加到乙的变量中~这样就不用释放甲了,甲只产生了个文本文件,最后把它删除就行了
以上用命令都可以实现.(可以搜索下关于文件流)
哈哈~ --------------------编程问答-------------------- 回4楼:
甲程序虽然是由乙生成的,但并不是由乙启动的,它是双击打开的,又怎么用命令行呢?
回5楼:
。。。。。。。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 写错了,是回5楼,6楼
麻烦6楼的同学先冲冲电,再来回帖 --------------------编程问答-------------------- 甲:
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public Form1(int x)
        {
        }
        public return_x()
        {
           Form1.ActiveForm.Close();
           Form2 frm = new Form1(x); 
        }
     }
乙:
public partial class Form2 : Form
    {
         public Form2()
        {
            InitializeComponent();

        }
        public Form2(int y)
        {
            InitializeComponent();
            y=x;

        }
        public return_y()
        {
           Form2.ActiveForm.Close();
           Form2 frm = new Form1(y); 
        }
     }

不知道樓主能清楚了嗎?




--------------------编程问答-------------------- 又看了下题感觉有点像绕口令,偶是新手,你的意思不就是把甲的数传给乙?然后呢? --------------------编程问答-------------------- 接口不清,所致 --------------------编程问答-------------------- 回10楼:
不知道樓主能清楚了嗎? 

不知道你清楚没有!

甲乙是两个独立的文件!!! --------------------编程问答-------------------- 自己說不清楚還願別人。。。。
你說的程序為什麽不說清楚不是窗體文件呢? --------------------编程问答-------------------- 同上 --------------------编程问答-------------------- 这个甲得到的是编译器生成的 IL 文件吗,还是 C# 源文件?
按楼主的意思我估计是 IL 文件,修改 IL 文件需要先了解 IL 代码的原理,这个太难了吧。

如果甲乙两个程序文件都在同一台机器上工作,何不考虑在注册表里加个键存取那个整数值。 --------------------编程问答-------------------- .net程序加壳?
没什么意义,属于被秒杀级的源代码保护方式,反编译支持直接吧资源文件另存为一个文件,再把保存出来的文件反编译就是了 --------------------编程问答-------------------- 我现在的办法是:
在乙释放甲的时候,在甲的尾部添加4个字节以存储这个整数
举例来说,甲的原始大小是n个字节,这时候就是n+4个字节
而甲这样写:
FileStream fs=File.OpenRead(Application.ExecutablePath);//读取自身
fs.Position=n;//偏移量为其原始大小,以便读取附加的内容
BinaryReader br=new BinaryReader(fs);
int a=br.ReadInt32();//a即为所要求的整数
br.Close();
fs.Close();

这样虽能解决问题,但感觉不太优雅,所以想找到更好的办法
至于说注册表,配置文件就不要提了,因为我要这个从乙中释放的甲在各个计算机上都能运行 --------------------编程问答-------------------- up --------------------编程问答-------------------- 我觉得你应该考虑重构代码
你可以在MSDN上找到它CSharpCodeProvider --------------------编程问答-------------------- up --------------------编程问答-------------------- 把你的甲释放出来存为临时文件,用Process调用,可以传参数给它,也可以返回值。看看Process和StartInfo。这样就可以满足你的要求了吧?运行完了,再删掉临时文件。 --------------------编程问答-------------------- .... --------------------编程问答-------------------- 把甲设计成为带参数的命令行程序

class a
{
    void Main(string[] args)
    
    {
         Console.Out.Write(输出的内容);
    }
}

在乙中

System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@"甲的路径"); 
 4    psi.RedirectStandardOutput = true; 
 5    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
 6    psi.UseShellExecute = false; 
 7    System.Diagnostics.Process listFiles; 
 8    listFiles = System.Diagnostics.Process.Start(psi); 
 9    System.IO.StreamReader myOutput = listFiles.StandardOutput; 
10    listFiles.WaitForExit();


上面listFiles 流就是进程甲输出的内容
好象可以用ReadToEnd()方法获取字符串
--------------------编程问答--------------------  甲           
 class   a 

        void   Main(string[]   args) 
        
        { 
                  Console.Out.Write(输出的内容); 
        } 


--------------



           string a = "乙传递给甲的参数1";
            string b = "乙传递给甲的参数2";
            ...........

            string exePath = "执行文件甲的路径";

            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.FileName = exePath;
            p.StartInfo.Arguments = " \"" + a+ "\" \"" + b+ "\""  + ........;
            p.StartInfo.ErrorDialog = false;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;

            p.Start();

            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();  //阻塞到那个进程结束
--------------------编程问答-------------------- 同意二楼 用Remoting 或 Web Service --------------------编程问答-------------------- ......

我只是说用乙生成甲,又没有说要去调用它!
乙生成甲后,并不执行甲,甲要拷贝到其他电脑上执行!
哪来的命令行!
菜B! --------------------编程问答-------------------- up
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,