2013-08-22 4 views
1

win7에서 런타임 (모듈)은 절대로 아무것도주지 않습니다. 첫 번째 인수는 항상 exe 경로가 될 것으로 기대하지만 항상 비어 있습니다.런타임 구조체를 사용하여 exe 경로를 얻는 방법?

+2

코드? 더 많은 컨텍스트? 문서/라이브러리에 링크 하시겠습니까? – BCS

+0

runtime.argc 승리 양식으로 initiamize 한 후 core.runtime. 예를 들어 winsamp처럼. – BBasile

답변

1

WinMain 함수를 사용할 때 (심지어 Runtime.initialize 호출 후) 런타임이 빈 값을 반환하는지 확인할 수 있습니다.

아마도 Druntime은 컴파일러에서 WinMain 기능을 찾으면 rt_args/rt_cArgs 개의 멤버를 채우기 위해 WinAPI 함수를 호출하고 호출해야합니다. 일반적으로 인수를 추출하려면 GetCommandLine 또는 CommandLineToArgvW을 사용합니다. 버그는 아마 bugzilla에 제출해야합니다.

현재 경로의 경우 현재 프로세스의 경로는 pull request이며 다음 2.064 릴리스로 변경해야합니다.

1

그냥 현재 경로를 얻는다면 std.file.getcwd()은 현재 디렉토리를 제공합니다.

+0

프로세스 경로가 실행 중입니다. not cwd – BBasile

+0

이것을 사용하면 오류가 발생합니다. 최근 콘솔에서 실행 되었기 때문에 잘못된 디렉토리에 ini를 작성하는 소프트웨어에서이 코드를 보았습니다. (코드에서 dev는 cwd가 exe 인 것으로 가정합니다. location) – 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

일반적으로 리눅스에서 작업하고, args [0]은 내가 예상했던 실행 파일 이름을 제공합니다. Windows 7 Ultimate가 설치된 다른 컴퓨터를 열었습니다. dmd를 설치하고 test.d 파일 이름으로 코드를 컴파일했습니다. 내가 실행할 때 이미 test.exe의 이름 인 화면에 "test"가 표시되었습니다. 설치에 문제가 있다고 생각합니다. (Win 7, 32-bit, DMD 2.063.2) – tcak

+0

@BBasile : 위의 예는 Windows 7에서 작성되었습니다.보다 정확하게, VER은'Microsoft Windows [Version 6.1.7601]','dmd -v "가'DMD32 D 컴파일러 v2.063.2'. DMD의 다른 버전을 사용해보십시오 ... – DejanLekic