D 如何使用运行时结构获取exe路径?

D 如何使用运行时结构获取exe路径?,d,dmd,D,Dmd,在win7下,运行时(模块)从不给我任何东西。我希望第一个参数总是exe路径,但它总是空的。如果只是为了获取当前路径,std.file.getcwd()提供当前目录 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) { w

在win7下,运行时(模块)从不给我任何东西。我希望第一个参数总是exe路径,但它总是空的。

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

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。

我可以确认,当使用
WinMain
函数时(甚至在调用
runtime.initialize
之后),运行时返回空值

如果编译器找到
WinMain
函数,Druntime可能应该尝试调用WinAPI函数来填充
rt\u args
/
rt\u cArgs
成员。通常会使用或来提取参数。可能应该为此提交一个bug


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

代码?更多的背景?链接到文档/库?runtime.argc core.runtime,然后以win形式初始化。就像示例winsamp.running进程路径一样。不使用cwd这会导致错误,我最近在一个软件上看到过这种情况,该软件在错误的目录中写入ini,因为它是从控制台启动的…(在代码中,开发人员假设cwd是exe位置)我不是开玩笑,Win7下的代码根本没有给我任何东西。我知道第一个arg是exe路径,但问题是:从我的角度来看,情况并非如此。我不明白为什么。通常我是在Linux上工作的,args[0]给我的可执行文件名正是我所期望的。我打开了另一台装有Windows7 Ultimate的电脑。我在上面安装了dmd,并用test.d文件名编译了您的代码。当我执行时,它在屏幕上显示“test”,这是test.exe的名称,这是正确的。我想你的安装有问题。(win7,32位,dmd2.063.2)@BBasile:上面的例子是在windows7上制作的。更准确地说,VER提供了Microsoft Windows[Version 6.1.7601],“dmd-v”提供了DMD32 D编译器v2.063.2。尝试其他版本的DMD。。。