ich will nur wissen ob die "OT4XB.DLL" im Zugriff ist.
unter XP funktioniert es ohne Probleme aber unter Win7 (32/64) und Win8
geht es mit dem EXE nicht ... aber mit VX als Debugger geht es !!!
natürlich geht es auch wenn ich die DLL in das Applications Verzeichnis lege ...
aber warum geht es mit dem Debugger (.T.) und ohne gibt es mir .F. ?
XPP TEST.PRG -B
ALINK /DE TEST.OBJ
TEST.EXE -> "yes" nur bei XP, "no" unter Win7/8
VX20.EXE TEST.EXE -> "yes" auch unter Win7/8
Code: Alles auswählen
PROCEDURE MAIN
IF is_ot4xb()
Msgbox("yes")
ELSE
Msgbox("no")
ENDIF
RETURN
FUNCTION is_ot4xb()
LOCAL lRet := .F.
LOCAL aInfo
LOCAL cHome := LEFT(AppName(.T.),LEN(AppName(.T.))-LEN(AppName(.F.)))
LOCAL cXppPath := GETENV("XPPROOT") // XPP ROOT path
LOCAL cLIBpath := GETENV("LIB")
LOCAL cSysPath := GETENV("PATH")
LOCAL DllName := "OT4XB.DLL"
LOCAL cPath := ""
DO CASE
CASE FILE(cHome+DllName) ; lRet := .T.
CASE IsFileInPath(cLIBpath,DllName,@cPath) ; lRet := .T.
CASE IsFileInPath(cSysPath,DllName,@cPath) ; lRet := .T.
ENDCASE
RETURN lRet
STATIC FUNCTION IsFileInPath(cEnvioment,DllName,cPath)
LOCAL RetVar := .F.
LOCAL nZahl := 0
LOCAL nPosi := 0
LOCAL nStart := 1
ALTD()
DO WHILE .T.
nPosi := AT(";",cEnvioment,nStart)
IF nPosi > 0
cPath := SUBSTR(cEnvioment,nStart,nPosi-nStart)
EndwithSlash( @cPath )
IF FILE ( cPath+DllName )
RetVar := .T.
EXIT
ELSEIF FILE ( ConvToAnsiCP(cPath+DllName) )
RetVar := .T.
EXIT
ELSE
nStart := nPosi+1
ENDIF
ELSE
cPath := SUBSTR(cEnvioment,nStart,LEN(cEnvioment)-nStart)
EndwithSlash( @cPath )
IF FILE ( cPath+DllName )
RetVar := .T.
ELSEIF FILE ( ConvToAnsiCP(cPath+DllName) )
RetVar := .T.
ENDIF
EXIT
ENDIF
ENDDO
RETURN RetVar
PROCEDURE EndwithSlash(cString)
LOCAL nPosi
nPosi := RAT("\",cString)
IF nPosi = LEN(cString)
ELSE
cString += "\"
ENDIF
cString := StrTran( cString , "\\", "\")
RETURN