Naar jeg har compilet programmet kommer der en exe fil ud... Jeg vil gerne have stien til denne... Men den kan jo variere hvis jeg flytter programmet.... Derfor vil jeg gerne have stien til biblioteket hvori exe filen ligger
exe-filen skulle meget gerne ligge i samme bibliotek som alle dine andre filer til programmet. Kig i din stifinder under programmer/program files og find Builder (jeg antager du anvender C++ Builder). Herunder ligger mapper, som indeholder dine nye filer inklusive exe-filen. Alternativt kan du angive din egen sti i indstillingerne for Builder.
Ja, men det er nu ikke lige det jeg soeger... Jeg skal INDE FRA MIT PROGRAM finde den sti hvor exe filen befinder sig... Jeg som person ved godt hvor programmet ligger, men det er programmet(exe filen) der skal vide hvor den SELV(programmet) ligger
Din path til din exe fil ligger nu i Buffer ......
Hvis du kan en smugle pascal vil dette muligvis være dig til hjælp :
function GetParamStr(P: PChar; var Param: string): PChar; var i, Len: Integer; Start, S, Q: PChar; begin while True do begin while (P[0] <> #0) and (P[0] <= \' \') do P := CharNext(P); if (P[0] = \'\"\') and (P[1] = \'\"\') then Inc(P, 2) else Break; end; Len := 0; Start := P; while P[0] > \' \' do begin if P[0] = \'\"\' then begin P := CharNext(P); while (P[0] <> #0) and (P[0] <> \'\"\') do begin Q := CharNext(P); Inc(Len, Q - P); P := Q; end; if P[0] <> #0 then P := CharNext(P); end else begin Q := CharNext(P); Inc(Len, Q - P); P := Q; end; end;
SetLength(Param, Len);
P := Start; S := Pointer(Param); i := 0; while P[0] > \' \' do begin if P[0] = \'\"\' then begin P := CharNext(P); while (P[0] <> #0) and (P[0] <> \'\"\') do begin Q := CharNext(P); while P < Q do begin S[i] := P^; Inc(P); Inc(i); end; end; if P[0] <> #0 then P := CharNext(P); end else begin Q := CharNext(P); while P < Q do begin S[i] := P^; Inc(P); Inc(i); end; end; end;
Result := P; end;
function ParamCount: Integer; var P: PChar; S: string; begin Result := 0; P := GetParamStr(GetCommandLine, S); while True do begin P := GetParamStr(P, S); if S = \'\' then Break; Inc(Result); end; end;
function ParamStr(Index: Integer): string; var P: PChar; Buffer: array[0..260] of Char; begin Result := \'\'; if Index = 0 then SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer))) else begin P := GetCommandLine; while True do begin P := GetParamStr(P, Result); if (Index = 0) or (Result = \'\') then Break; Dec(Index); end; end; end;
Hvis det er til C++ Builder så sig lige til så er verden MEGET nemmere ...
CString strPath; GetModuleFileName(0, strPath.GetBuffer(_MAX_PATH), _MAX_PATH); strPath.ReleaseBuffer(); strPath = strPath.Left(strPath.ReverseFind(\'\\\\\')); // Get only the path, not the file name
jo jo .. Problemet er blot at jeg ved ikke hvilken C++ Compiler han bruger ... Hvis mand bruger VC++ så har vi jo baladen så er der INGENTING der er nemt !
=>borrisholt Hmm, jeg vil opfatte dit sidste indlæg som et dårligt forsøg på at starte en religionskrig!
Hvis du havde demonstreret et kendskab til VC++, i form af en forklaring på hvorledes man (på påståelig, besværlig vis) kan finde den ønskede oplysning, havde dit indlæg naturligvis været noget nær legalt... (i øvrigt er det jo ikke compileren, men de libs man har til rådighed, der afgører sagen)
Jeg synes mit tidligere eksempel virker rimelig overkommeligt, men der er faktisk også, i VC++, muligheden for at bruge attributten \'m_pszHelpFilePath\' på application objektet, der også vil indeholde stien til applikationen...
Jeg har ikke selv lavet nogle tests, men udover muligheden for, at kompileren i sig selv er langsommere, kan jeg ikke komme i tanke om andet, end at antallet af libs mm. den søger igennem måske er flere..?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.