2013-08-22 24 views
1

在win7下运行时(模块)从不给我任何东西。我期望第一个参数始终是exe文件的路径,但它总是空的。如何使用运行时结构获取exe路径?

+2

代码?更多上下文?链接到文档/库? – BCS

+0

runtime.argc以胜利形式启动后的core.runtime。就像在示例winsamp中一样。 – BBasile

回答

1

当使用WinMain函数时(即使在调用Runtime.initialize后),我可以确认运行时返回空值。

如果编译器发现WinMain函数,Druntime应尝试调用WinAPI函数来填充成员rt_args/rt_cArgs。通常可以使用GetCommandLineCommandLineToArgvW来提取参数。应该为此提交一个bug到bugzilla

至于当前进程的实际路径,有一个开放的pull request应该使其进入下一个2.064版本。

1

如果只是获取当前路径,std.file.getcwd()会为您提供当前目录。

+0

正在运行进程路径。不是cwd – BBasile

+0

使用这个会导致错误,我最近在一个软件上看到了这个,它在一个错误的目录中写入了一个ini,因为它是从控制台启动的...(在代码中dev是假定cwd是exe位置) – BBasile

0
C:\work\so> dmd bbasile01.d 

C:\work\so> bbasile01.exe 
C:\work\so\bbasile01.exe 

C:\work\so> type bbasile01.d 
import std.stdio; 

int main(string[] args) { 
    writeln(args[0]); 
    return 0; 
} // main() function 

编写跨平台实现,让正在运行的进程路径的功能,不是一个简单的任务......它已经在数百个(不d相关的)线程在这里的StackOverflow的讨论中来。

+0

我不是在Win 7下勉强这个代码,完全没有给我任何代码。我知道第一个参数是exe的路径,但问题是:从我这边来看并不是这样。我不明白为什么。 – BBasile

+0

通常我在Linux上工作,并且args [0]给出了我期望的可执行文件名。我打开了另一台装有Windows 7旗舰版的电脑。我在它上面安装了dmd并用test.d文件名编译了你的代码。当我执行时,它会在屏幕上显示“测试”,这已经是test.exe的名称了,这是正确的。我认为你的安装有问题。 (Win 7,32位,DMD 2.063.2) – tcak

+0

@BBasile:上面的例子是在Windows 7上进行的。更确切地说,VER给出了'Microsoft Windows [Version 6.1.7601]',“dmd -v”给出了'DMD32 D Compiler v2.063.2'。尝试一些其他版本的DMD ... – DejanLekic

相关问题