rednaxela 发表于 2007-11-23 18:20:43

上面那段就是RPython程序...既然不是普通(完整)Python,就无从比较了,原因上面说了.

lw 发表于 2007-11-24 09:51:47

偶只知道exec...且不适合在WIN下用_

shawind 发表于 2007-11-24 11:00:19

引用第10楼rednaxela于2007-11-23 18:20发表的:
上面那段就是RPython程序...既然不是普通(完整)Python,就无从比较了,原因上面说了.
原来是这样。完整不完整,无所谓了。反正我又不会这个。

引用第11楼lw于2007-11-24 09:51发表的:
偶只知道exec...且不适合在WIN下用_
我是完全没在非Win下试过使用这样的功能。

rednaxela 发表于 2007-11-27 18:14:31

我有个疑问……shawind,顶楼的代码能编译通过么?用什么版本的编译器?GDC还是DMD?
fromMBSz的signature不是invariant(char)*,int,toMBSz的不是invariant(char)[],uint么……

shawind 发表于 2007-11-27 18:41:21

dmd 1.x可过,2.0dmd我从来没用过...

rednaxela 发表于 2007-11-27 19:06:36

[quote

原来在1.x可编译么...

在2.0我把不匹配的地方改到了匹配,例如说加上了cast(invariant)和代码页参数936,但……getName()怎么都会失败。去掉getName()的话倒能行
Phobos里的代码页相关代码实在太恶劣了……

去掉getName()之后:
C:\\Downloads\\D\\dmd\\bin>run "我"
'我.exe' 不是内部或外部命令,也不是可运行的程序或批处理文件。

运行的是 => 我.exe
C:\\Downloads\\D\\dmd\\bin>run "我.exe"
'我.exe' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

运行的是 => 我.exe

//run.d

import std.process;
import std.path;
import std.windows.charset;
import std.string;

alias printf p;

void main(char[][] args)
{
    if (args.length == 2)
    {
      char[] filename;
      filename ~= addExt(fromMBSz(cast(invariant)args.ptr, 936), "exe");
      int i = system(toString(toMBSz(filename.idup)));
      p("%s\\n",toMBSz(cast(invariant)("\\n运行的是 => " ~ filename), 936));
    }
    else
    {
      p("%s\\n",toMBSz("错误: 你没有输入参数,或者输入超过一个以上的参数!", 936));
      p("%s\\n",toMBSz(r"例: 当输入 'run c:\\test\\test.d' 时调用 'c:\\test\\test.exe'", 936));
    }
}

invariant(char)[] addExt(invariant(char)[] filename, invariant(char)[] ext);
Adds or replaces an extension to a filename.

This function first searches filename for an extension and replaces it with ext if found. If there is no extension, ext will be appended. ext should not have any leading dots, one will be inserted between filename and ext if filename doesn't already end with one.

Returns:
filename + ext if filename is extensionless. Otherwise strips filename's extension off, appends ext and returns the result.
addExt()本来就不需要预先调用getName()...

shawind 发表于 2007-11-27 20:43:46

2.0的phobos中invariant之类的,都是直接批量加上去的,可能用起来是会有点问题,不过作者一直没有时间来修正。
真正能用的就是1.x系列。

像addExt()这样的函数,我几乎不怎么用,它到底是干什么也不知道....
页: 1 [2]
查看完整版本: [分享]调用其他EXE