↑ ↓ ← → Ameer <Ameer_member pathlink.com>
writes:
Hey all.
I have been looking at the d specs and am very pleased with what I see; it'll
probably hit big pretty soon.
I've been wondering, if we could possibly have a generic app class or struct,
like in visual basic. In vb, it normally contains the app's name, path,
major/minor/revission numbers, and a full version string. This will eliminate
the need for a "prog_version.d" file, and a separate variable, among other
things; if nothing else, you can tell app.path lot easier than args[0] if it's
even still used.
Thanks,
Ameer
↑ ↓ ← → "KTC" <me here.com>
writes:
This newsgroup is now deprecated. Try
news://news.digitalmars.com/digitalmars.D
↑ ↓
← → J C Calvarese <jcc7 cox.net>
writes:
Ameer wrote:
Hey all.
I have been looking at the d specs and am very pleased with what I see; it'll
probably hit big pretty soon.
I've been wondering, if we could possibly have a generic app class or struct,
like in visual basic. In vb, it normally contains the app's name, path,
major/minor/revission numbers, and a full version string. This will eliminate
the need for a "prog_version.d" file, and a separate variable, among other
things; if nothing else, you can tell app.path lot easier than args[0] if it's
even still used.
Thanks,
Ameer
(I'm cross-posting this to the new newsgroup:
http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D).
It sounds like a job for a library to me. Here's a function that could
be used for app.path (I haven't tested it too thoroughly, but it seems
to work):
/*
apppath.d
Shows how to find the path of the current executable.
(Windows-only)
*/
import std.c.windows.windows;
import std.c.stdio;
import std.string;
extern(C) int strlen(char* c);
extern(Windows)
{
DWORD GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize);
HMODULE GetModuleHandleA(LPCSTR lpModuleName);
alias GetModuleFileNameA GetModuleFileName;
alias GetModuleHandleA GetModuleHandle;
}
char[] CharRetString(char c)
{
/* return a string from a character */
char[] s = "?";
s[0] = c;
return s;
}
char[] repeatString(int count, ubyte a)
{ /* returns a string containing 'count' occurences of the character
corresponding to the ASCII character code 'a'. */
char[] tmp;
for (int i = 0; i < count; i++)
tmp ~= CharRetString(a);
return tmp;
}
char[] AppExePath()
{
/* returns the Path to the current .exe module (e.g. "c:\dmd\src\test\") */
char[] strtmp = repeatString(1024, 32);
int j;
GetModuleFileName(GetModuleHandle(null), cast(char*) strtmp, 1024);
j = rfind(strtmp[0..strlen(strtmp)], "\\");
strtmp = strtmp[0..j] ~ "\\";
return strtmp;
}
void main()
{
printf("%.*s\n", AppExePath);
}
--
Justin (a/k/a jcc7)
http://jcc_7.tripod.com/d/
↑ ↓ ← → "Pablo Aguilar" <paguilarg hotmail.com>
writes:
char[] AppExePath()
{
/* returns the Path to the current .exe module (e.g. "c:\dmd\src\test\")
char[] strtmp = repeatString(1024, 32);
int j;
GetModuleFileName(GetModuleHandle(null), cast(char*) strtmp, 1024);
j = rfind(strtmp[0..strlen(strtmp)], "\\");
strtmp = strtmp[0..j] ~ "\\";
return strtmp;
}
You should try PathRemoveFileSpec from shlwapi.dll (shlwapi.h and
shlwapi.lib)
↑ ↓ ← → J C Calvarese <jcc7 cox.net>
writes:
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Pablo Aguilar wrote:
char[] AppExePath()
{
/* returns the Path to the current .exe module (e.g. "c:\dmd\src\test\")
*/
char[] strtmp = repeatString(1024, 32);
int j;
GetModuleFileName(GetModuleHandle(null), cast(char*) strtmp, 1024);
j = rfind(strtmp[0..strlen(strtmp)], "\\");
strtmp = strtmp[0..j] ~ "\\";
return strtmp;
}
You should try PathRemoveFileSpec from shlwapi.dll (shlwapi.h and
shlwapi.lib)
I'd rather not. I think I can find the path without using an OS
function. I don't see the advantage in adding a .dll dependency (unless
I had a grudge against Windows 95 users who haven't upgraded to IE 4.0):
Minimum operating systems
Windows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98,
Windows 95 with Internet Explorer 4.0
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/pathremovefilespec.asp
I've attached an improved version of the AppExePath function since I've
received such a large response.
--
Justin (a/k/a jcc7)
http://jcc_7.tripod.com/d/