【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#