From: Yaroslav K. <kav...@tu...> - 2006-01-21 22:34:45
|
Many thanks for your test version! Nice work! But very-very "experimental prerelease" :) Some small offers: --- src/code/filesys.lisp Fri Jan 6 18:45:00 2006 +++ src/code/filesys.lisp Sat Jan 21 17:23:23 2006 @@ -559,7 +559,10 @@ (defun user-homedir-pathname (&optional host) "Return the home directory of the user as a pathname." (declare (ignore host)) - (pathname (sb!unix:uid-homedir (sb!unix:unix-getuid)))) + #!-win32 + (pathname (sb!unix:uid-homedir (sb!unix:unix-getuid))) + #!+win32 + (pathname (or (posix-getenv "HOME") (posix-getenv "USERPROFILE")))) (defun file-write-date (file) #!+sb-doc --- src/code/toplevel.lisp Mon Jan 16 17:39:58 2006 +++ src/code/toplevel.lisp Sat Jan 21 23:44:14 2006 @@ -479,10 +479,22 @@ #!-win32 (probe-init-files sysinit (init-file-name (posix-getenv "SBCL_HOME") "sbclrc") - "/etc/sbclrc")) + "/etc/sbclrc") + #!+win32 (probe-init-files sysinit + (init-file-name (posix-getenv "SBCL_HOME") + "sbclrc") + (let ((name-exe (pathname (car *posix-argv*)))) + (namestring + (make-pathname :host (pathname-host name-exe) + :device (pathname-device name-exe) + :directory (pathname-directory name-exe) + :name "sbclrc"))))) (userinit-truename #!-win32 (probe-init-files userinit (init-file-name (posix-getenv "HOME") + ".sbclrc")) + #!+win32 (probe-init-files userinit + (init-file-name (namestring (user-homedir-pathname)) ".sbclrc")))) ;; This CATCH is needed for the debugger command TOPLEVEL to Thanks! -- WBR, Yaroslav Kavenchuk. |
From: Rudi S. <ru...@co...> - 2006-01-22 11:09:02
Attachments:
PGP.sig
|
On 21. J=E4n 2006, at 23:34, Yaroslav Kavenchuk wrote: > Some small offers: > > --- src/code/filesys.lisp Fri Jan 6 18:45:00 2006 > +++ src/code/filesys.lisp Sat Jan 21 17:23:23 2006 > @@ -559,7 +559,10 @@ > (defun user-homedir-pathname (&optional host) > "Return the home directory of the user as a pathname." > (declare (ignore host)) > - (pathname (sb!unix:uid-homedir (sb!unix:unix-getuid)))) > + #!-win32 > + (pathname (sb!unix:uid-homedir (sb!unix:unix-getuid))) > + #!+win32 > + (pathname (or (posix-getenv "HOME") (posix-getenv "USERPROFILE")))) I think this is ok; HOME is not normally set, except by cygwin-heads =20 and other Unix refugees. An alternative to reading %USERPROFILE% =20 might be to look up CSIDL_PROFILE via ShGetSpecialFolderPath. > --- src/code/toplevel.lisp Mon Jan 16 17:39:58 2006 > +++ src/code/toplevel.lisp Sat Jan 21 23:44:14 2006 > @@ -479,10 +479,22 @@ > #!-win32 (probe-init-files sysinit > (init-file-name (posix-=20 > getenv "SBCL_HOME") > "sbclrc") > - "/etc/sbclrc")) > + "/etc/sbclrc") > + #!+win32 (probe-init-files sysinit > + (init-file-name (posix-=20 > getenv "SBCL_HOME") > + "sbclrc") > + (let ((name-exe =20 > (pathname (car *posix-argv*)))) > + (namestring > + (make-pathname :host =20= > (pathname-host name-exe) > + :device =20= > (pathname-device name-exe) > + :directo=20= > ry (pathname-directory name-exe) > + :name =20= > "sbclrc"))))) > (userinit-truename > #!-win32 (probe-init-files userinit > (init-file-name (posix-=20 > getenv "HOME") > + =20 > ".sbclrc")) > + #!+win32 (probe-init-files userinit > + (init-file-name =20 > (namestring (user-homedir-pathname)) > =20 > ".sbclrc")))) I think we might want to go native all the way and store the sbclrc =20 file in a subdirectory "sbcl" of CSIDL_APPDATA since that's where =20 well-behaved Windows programs store their private bits. Same for the =20= system-wide sbclrc - that might go into a subdirectory of =20 CSIDL_COMMON_APPDATA. This might also be a good default value for =20 SBCL_HOME, incidentally. http://msdn.microsoft.com/library/default.asp?url=3D/library/en-us/=20 shellcc/platform/shell/reference/enums/csidl.asp Sorry for not providing patches; I don't have a Windows box at home... Cheers, Rudi |
From: Yaroslav K. <kav...@tu...> - 2006-01-22 17:41:51
|
Rudi Schlatte wrote: > I think this is ok; HOME is not normally set, except by cygwin-heads > and other Unix refugees. An alternative to reading %USERPROFILE% > might be to look up CSIDL_PROFILE via ShGetSpecialFolderPath. Thanks! But... I am newbie in sb-alien. How define /lpszPath/ in ShGetSpecialFolderPath and how work with it? (define-alien-routine ("SHGetSpecialFolderPathA" shgetspecialfolderpath) boolean (hwndOwner SB-WIN32:HANDLE) (lpszPath c-string :in-out) ;; !!! - THIS IS WRONG (nFolder int) (fCreate boolean)) Maybe ... (lpszPath (array char 260) :in-out) ... but how work with it? Thanks! And sorry. P.S. hwndOwner is result of GetConsoleWindow - (define-alien-routine ("GetConsoleWindow" getconsolewindow) SB-WIN32:HANDLE) ? P.P.S. If use SHGetSpecialFolderPathW (strings in unicode) - how? -- WBR, Yaroslav Kavenchuk. |
From: Yaroslav K. <kav...@je...> - 2006-01-23 14:30:51
|
Rudi Schlatte wrote: > I think we might want to go native all the way and store the sbclrc > file in a subdirectory "sbcl" of CSIDL_APPDATA since that's where > well-behaved Windows programs store their private bits. Same for the > system-wide sbclrc - that might go into a subdirectory of > CSIDL_COMMON_APPDATA. This might also be a good default value for > SBCL_HOME, incidentally. > > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ > shellcc/platform/shell/reference/enums/csidl.asp Append following lines to win32.lisp - it is correct? (sb-alien:load-shared-object "kernel32.dll") ;; This is need? (sb-alien:load-shared-object "shell32.dll") ;; - // - (declaim (inline get-console-window)) (define-alien-routine ("GetConsoleWindow" get-console-window) SB-WIN32:HANDLE) (defconstant MAX_PATH 260) (defun get-special-folder-path (CSIDL &optional create-path) "http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetspecialfolderpath.asp" (with-alien ((apath (* char) (make-alien char (1+ MAX_PATH)))) (alien-funcall (extern-alien "SHGetSpecialFolderPathA" (function boolean SB-WIN32:HANDLE c-string int boolean)) (get-console-window) apath CSIDL create-path) (cast apath c-string))) ;; is possible another way? ;; CSIDL from shlobj.h (defconstant CSIDL_DESKTOP 0) (defconstant CSIDL_INTERNET 1) (defconstant CSIDL_PROGRAMS 2) (defconstant CSIDL_CONTROLS 3) (defconstant CSIDL_PRINTERS 4) (defconstant CSIDL_PERSONAL 5) (defconstant CSIDL_FAVORITES 6) (defconstant CSIDL_STARTUP 7) (defconstant CSIDL_RECENT 8) (defconstant CSIDL_SENDTO 9) (defconstant CSIDL_BITBUCKET 10) (defconstant CSIDL_STARTMENU 11) (defconstant CSIDL_DESKTOPDIRECTORY 16) (defconstant CSIDL_DRIVES 17) (defconstant CSIDL_NETWORK 18) (defconstant CSIDL_NETHOOD 19) (defconstant CSIDL_FONTS 20) (defconstant CSIDL_TEMPLATES 21) (defconstant CSIDL_COMMON_STARTMENU 22) (defconstant CSIDL_COMMON_PROGRAMS 23) (defconstant CSIDL_COMMON_STARTUP 24) (defconstant CSIDL_COMMON_DESKTOPDIRECTORY 25) (defconstant CSIDL_APPDATA 26) (defconstant CSIDL_PRINTHOOD 27) (defconstant CSIDL_LOCAL_APPDATA 28) (defconstant CSIDL_ALTSTARTUP 29) (defconstant CSIDL_COMMON_ALTSTARTUP 30) (defconstant CSIDL_COMMON_FAVORITES 31) (defconstant CSIDL_INTERNET_CACHE 32) (defconstant CSIDL_COOKIES 33) (defconstant CSIDL_HISTORY 34) (defconstant CSIDL_COMMON_APPDATA 35) (defconstant CSIDL_WINDOWS 36) (defconstant CSIDL_SYSTEM 37) (defconstant CSIDL_PROGRAM_FILES 38) (defconstant CSIDL_MYPICTURES 39) (defconstant CSIDL_PROFILE 40) (defconstant CSIDL_SYSTEMX86 41) (defconstant CSIDL_PROGRAM_FILESX86 42) (defconstant CSIDL_PROGRAM_FILES_COMMON 43) (defconstant CSIDL_PROGRAM_FILES_COMMONX86 44) (defconstant CSIDL_COMMON_TEMPLATES 45) (defconstant CSIDL_COMMON_DOCUMENTS 46) (defconstant CSIDL_COMMON_ADMINTOOLS 47) (defconstant CSIDL_ADMINTOOLS 48) (defconstant CSIDL_CONNECTIONS 49) (defconstant CSIDL_COMMON_MUSIC 53) (defconstant CSIDL_COMMON_PICTURES 54) (defconstant CSIDL_COMMON_VIDEO 55) (defconstant CSIDL_RESOURCES 56) (defconstant CSIDL_RESOURCES_LOCALIZED 57) (defconstant CSIDL_COMMON_OEM_LINKS 58) (defconstant CSIDL_CDBURN_AREA 59) (defconstant CSIDL_COMPUTERSNEARME 61) (defconstant CSIDL_FLAG_DONT_VERIFY #x4000) (defconstant CSIDL_FLAG_CREATE #x8000) (defconstant CSIDL_FLAG_MASK #xFF00) ;; End win32.lisp And rewrite my offers to: file-sys.lisp: --- src/code/filesys.lisp Fri Jan 6 18:45:00 2006 +++ src/code/filesys.lisp Sat Jan 21 17:23:23 2006 @@ -559,7 +559,10 @@ (defun user-homedir-pathname (&optional host) "Return the home directory of the user as a pathname." (declare (ignore host)) - (pathname (sb!unix:uid-homedir (sb!unix:unix-getuid)))) + #!-win32 + (pathname (sb!unix:uid-homedir (sb!unix:unix-getuid))) + #!+win32 + (pathname (or (posix-getenv "HOME") (sb!win32:get-special-folder-path CSIDL_PROFILE)))) toplevel.lisp: --- src/code/toplevel.lisp Mon Jan 16 17:39:58 2006 +++ src/code/toplevel.lisp Sat Jan 21 23:44:14 2006 @@ -479,10 +479,22 @@ #!-win32 (probe-init-files sysinit (init-file-name (posix-getenv "SBCL_HOME") "sbclrc") - "/etc/sbclrc")) + "/etc/sbclrc") + #!+win32 (probe-init-files sysinit + (init-file-name (posix-getenv "SBCL_HOME") + "sbclrc") + (concatenate 'string + (sb!win32:get-special-folder-path CSIDL_COMMON_APPDATA) + "\\sbcl\\sbclrc"))) (userinit-truename #!-win32 (probe-init-files userinit (init-file-name (posix-getenv "HOME") + ".sbclrc")) + #!+win32 (probe-init-files userinit + (concatenate 'string + (sb!win32:get-special-folder-path CSIDL_APPDATA) + "\\sbcl\\.sbclrc"))))) --------------------------------------------------------------------- But maybe do not use subfolder "sbcl" for 'userinit-truename? Thanks! -- WBR, Yaroslav Kavenchuk. |
From: Rudi S. <ru...@co...> - 2006-01-23 15:07:20
Attachments:
PGP.sig
|
On 23. J=E4n 2006, at 15:32, Yaroslav Kavenchuk wrote: > Append following lines to win32.lisp - it is correct? =46rom a cursory glance, the patch looks good. I don't have regular =20= access to a windows pc for private work, so somebody else will =20 perhaps be quicker to test it. I imagine the constant definitions =20 added at the end of win32.lisp can move to tools-for-build/grovel-=20 headers.c instead (where the values will be extracted from the =20 windows header file), but that's mostly a cosmetic change. Ditto for =20= MAX_PATH. > But maybe do not use subfolder "sbcl" for 'userinit-truename? Regardless of the location of .sbclrc, I think having a subfolder is =20 good -- it is a logical place for contribs (for a personal =20 installation of sbcl, i.e. when the user doesn't have administrator =20 rights) and libraries downloaded via asdf-install. My vote for the location of .sbclrc itself would be (user-homedir-=20 pathname), since that's where emacs and cygwin place their dotfiles, =20 but I'm willing to be persuaded otherwise. I think merging the patch will have to wait until after the release =20 since we're in freeze mode, but if no one else's quicker than me I'll =20= merge something closely resembling your patch early in the 0.9.9 cycle. Many thanks, Rudi |
From: James B. <ja...@ja...> - 2006-01-23 17:05:20
|
Rudi Schlatte <ru...@co...> writes: > On 23. J=C3=A4n 2006, at 15:32, Yaroslav Kavenchuk wrote: > >> Append following lines to win32.lisp - it is correct? > > From a cursory glance, the patch looks good. I don't have regular > access to a windows pc for private work, so somebody else will > perhaps be quicker to test it. I imagine the constant definitions > added at the end of win32.lisp can move to tools-for-build/grovel- > headers.c instead (where the values will be extracted from the > windows header file), but that's mostly a cosmetic change. Ditto > for MAX_PATH. I've been avoiding loading the Win32 DLLs in SBCL itself, instead adding needed Win32 functions to 'scratch()' and using them through static symbols. At least until we have linkage tables this seems like the right thing to me. If these new Win32 API functions are called this way, you'll have to decorate them with their stdcall gunk (@4) like the others. James |
From: Yaroslav K. <kav...@tu...> - 2006-01-23 23:21:50
|
Rudi Schlatte wrote: > From a cursory glance, the patch looks good. Oops, one remark: at the time of compile toplevel.lisp module win32.lisp is not compiled and not loaded. I can not use (sb!win32:get-special-folder-path sb!win32:CSIDL_COMMON_APPDATA) in toplevel.lisp. What can I do? Thanks. -- WBR, Yaroslav Kavenchuk. |
From: Christophe R. <cs...@ca...> - 2006-01-24 09:32:04
|
Yaroslav Kavenchuk <kav...@tu...> writes: > Rudi Schlatte wrote: > >> From a cursory glance, the patch looks good. > > Oops, one remark: at the time of compile toplevel.lisp module > win32.lisp is not compiled and not loaded. > I can not use (sb!win32:get-special-folder-path > sb!win32:CSIDL_COMMON_APPDATA) in toplevel.lisp. > What can I do? If the problem is that the constant value isn't present in the cross-compile environment, this is what grovel-headers is for. Cheers, Christophe |
From: Yaroslav K. <kav...@je...> - 2006-01-24 11:11:56
|
Christophe Rhodes wrote: > If the problem is that the constant value isn't present in the > cross-compile environment, this is what grovel-headers is for. I am sorry for the incomplete information. build log: ... ; compiling file "C:\\gnu\\home\\src\\sbcl\\sbcl\\src\\code\\toplevel.lisp" (written 23 JAN 2006 10:23:28 PM): ; compiling (IN-PACKAGE "SB!IMPL") <skip successful report> ; compiling (DEFUN PROCESS-EVAL-OPTIONS ...) compilation aborted because of fatal error: READ failure in COMPILE-FILE: READER-ERROR at 21225 (line 487, column 87) on #<SB-SYS:FD-STREAM for "file C:\\gnu\\home\\src\\sbcl\\sbcl\\src\\code\\toplevel.lisp" {9513681}>: Symbol "GET-SPECIAL-FOLDER-PATH" not found in the SB!WIN32 package. ... this part of toplevel.lisp: #!+win32 (probe-init-files sysinit (init-file-name (posix-getenv "SBCL_HOME") "sbclrc") (concatenate 'string (sb!win32:get-special-folder-path sb!win32:CSIDL_COMMON_APPDATA) "\\sbcl\\sbclrc"))) end of win32.lisp: (defun get-special-folder-path (CSIDL &optional create-path) "http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetspecialfolderpath.asp" (with-alien ((apath (* char) (make-alien char (1+ MAX_PATH)))) (alien-funcall (extern-alien "SHGetSpecialFolderPathA" (function boolean handle (* char) int boolean)) (get-console-window) apath CSIDL create-path) (cast apath c-string))) Thanks! -- WBR, Yaroslav Kavenchuk. |
From: Christophe R. <cs...@ca...> - 2006-01-24 11:53:44
|
Yaroslav Kavenchuk <kav...@je...> writes: > Christophe Rhodes wrote: > >> If the problem is that the constant value isn't present in the >> cross-compile environment, this is what grovel-headers is for. > > I am sorry for the incomplete information. > > build log: > > ... > ; compiling file > "C:\\gnu\\home\\src\\sbcl\\sbcl\\src\\code\\toplevel.lisp" (written 23 > JAN 2006 10:23:28 PM): > ; compiling (IN-PACKAGE "SB!IMPL") > <skip successful report> > ; compiling (DEFUN PROCESS-EVAL-OPTIONS ...) > compilation aborted because of fatal error: > READ failure in COMPILE-FILE: > READER-ERROR at 21225 (line 487, column 87) on #<SB-SYS:FD-STREAM for > "file C:\\gnu\\home\\src\\sbcl\\sbcl\\src\\code\\toplevel.lisp" {9513681}>: > Symbol "GET-SPECIAL-FOLDER-PATH" not found in the SB!WIN32 package. This sounds like you should be adding to package-data-list.lisp-expr; this is the error you would typically get if you attempt to use an unexported symbol like sb!win32:get-special-folder-path (where sb!win32::get-special-folder-path would probably work) Cheers, Christophe |
From: Yaroslav K. <kav...@je...> - 2006-01-24 12:53:09
|
Christophe Rhodes wrote: > This sounds like you should be adding to package-data-list.lisp-expr; > this is the error you would typically get if you attempt to use an > unexported symbol like > sb!win32:get-special-folder-path > (where sb!win32::get-special-folder-path would probably work) Thanks! But... ; compiling file "C:\\gnu\\home\\src\\sbcl\\sbcl\\src\\code\\toplevel.lisp" (written 24 JAN 2006 02:14:40 PM): ... ; compilation unit finished ; caught 2 WARNING conditions ; caught 13 STYLE-WARNING conditions ; printed 9 notes ; C:\gnu\home\src\sbcl\sbcl\obj\from-xc\src\code\toplevel.lisp-obj-tmp written ; compilation finished in 0:00:02 debugger invoked on a SIMPLE-ERROR: FAILURE-P was set when creating "obj/from-xc/src/code/toplevel.lisp-obj". Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [RECOMPILE] Recompile file "src/code/toplevel.lisp" 1: [CONTINUE ] Continue, using possibly bogus file "obj/from-xc/src/code/toplevel.lisp-obj" 2: [ABORT ] Exit debugger, returning to top level. (COMPILE-STEM "src/code/toplevel" :OBJ-PREFIX "obj/from-xc/" :OBJ-SUFFIX ".lisp-obj" :TMP-OBJ-SUFFIX-SUFFIX "-tmp" :SRC-PREFIX "" :SRC-SUFFIX ".lisp" :COMPILE-FILE #<FUNCTION SB-XC:COMPILE-FILE> :TRACE-FILE NIL :IGNORE-FAILURE-P NIL) 0] deleted #P"C:\\gnu\\home\\src\\sbcl\\sbcl\\obj\\from-xc\\src\\code\\toplevel.lisp-obj-tmp" Why? |
From: Brian M. <br...@ma...> - 2006-01-24 12:56:46
|
On 1/24/06 6:54 AM, "Yaroslav Kavenchuk" <kav...@je...> wrote: > Christophe Rhodes wrote: > >> This sounds like you should be adding to package-data-list.lisp-expr; >> this is the error you would typically get if you attempt to use an >> unexported symbol like >> sb!win32:get-special-folder-path >> (where sb!win32::get-special-folder-path would probably work) > > Thanks! > But... > > ; compiling file > "C:\\gnu\\home\\src\\sbcl\\sbcl\\src\\code\\toplevel.lisp" (written 24 > JAN 2006 02:14:40 PM): > ... > ; compilation unit finished > ; caught 2 WARNING conditions > ; caught 13 STYLE-WARNING conditions > ; printed 9 notes You didn't provide enough of the log to show what's going on. If a full WARNING is generated during cross-compilation, it will cause FAILURE-P to be set. You should look through the log to figure out where those two full WARNINGs are coming from. -- Brian Mastenbrook br...@ma... http://brian.mastenbrook.net/ |
From: Yaroslav K. <kav...@je...> - 2006-01-24 13:11:29
|
Brian Mastenbrook wrote: > You didn't provide enough of the log to show what's going on. If a full > WARNING is generated during cross-compilation, it will cause FAILURE-P > to be > set. > > You should look through the log to figure out where those two full > WARNINGs > are coming from. ; (SB!WIN32::GET-SPECIAL-FOLDER-PATH SB!WIN32::CSIDL_COMMON_APPDATA) ; ; caught WARNING: ; undefined variable: SB!WIN32::CSIDL_COMMON_APPDATA ... ; ; caught WARNING: ; This variable is undefined: ; SB!WIN32::CSIDL_COMMON_APPDATA from tools-for-build/grovel-headers.c: ... #ifdef _WIN32 printf("(in-package \"SB!WIN32\")\n\n"); defconstant ("input-record-size", sizeof (INPUT_RECORD)); defconstant ("MAX_PATH", MAX_PATH); printf(";;; CSIDL\n"); ... defconstant ("CSIDL_COMMON_APPDATA", CSIDL_COMMON_APPDATA); ... $ ./grovel-headers.exe ;;;; This is an automatically generated file, please do not hand-edit it. ;;;; See the program "grovel-headers.c". (in-package "SB!WIN32") (defconstant input-record-size 20) ; #x14 (defconstant MAX_PATH 260) ; #x104 ;;; CSIDL (defconstant CSIDL_DESKTOP 0) ; #x0 ... (defconstant CSIDL_COMMON_APPDATA 35) ; #x23 ... What to do? Thanks! -- WBR, Yaroslav Kavenchuk. |
From: Christophe R. <cs...@ca...> - 2006-01-24 14:52:59
|
Yaroslav Kavenchuk <kav...@je...> writes: > What to do? toplevel.lisp is compiled before win32.lisp. Simply move the functions that depend on constant values into win32.lisp (or later). In this instance, there might be a case for moving the logic for finding the system and user init files into foo-os.lisp files, or somewhere similar. Cheers, Christophe |
From: Yaroslav K. <kav...@je...> - 2006-01-24 15:08:02
|
Christophe Rhodes wrote: > toplevel.lisp is compiled before win32.lisp. Simply move the > functions that depend on constant values into win32.lisp (or later). > > In this instance, there might be a case for moving the logic for > finding the system and user init files into foo-os.lisp files, or > somewhere similar. Thanks! I have substituted value of CSIDL_COMMON_APPDATA in toplevel.lisp. Result of compile is ok, but: ... The foreign symbol table is: ".bss" = #X 415010 ... debugger invoked on a SIMPLE-ERROR: The foreign symbol "GetConsoleWindow" is undefined. Oops. -- WBR, Yaroslav Kavenchuk. |
From: Yaroslav K. <kav...@je...> - 2006-01-25 12:25:48
|
> debugger invoked on a SIMPLE-ERROR: > The foreign symbol "GetConsoleWindow" is undefined. Oops, I forgotten 'scratch(void)', excuse me. Next question: compatibility with what version of windows is necessary? Thansk! -- WBR, Yaroslav Kavenchuk. |
From: Yaroslav K. <kav...@je...> - 2006-01-25 14:10:55
|
How add function from other dynamic library? I add to win-32oc.c #include <shlobj.h> ... void scratch(void) { ... SHGetFolderPathA(0, 0, 0, 0, 0); ... and 'define-alien-routine' in win32.lisp. Result: sbcl.exe compile is ok, but check of foreign symbol table is broken: ... "sjl_once.3" = #X 410168 debugger invoked on a SIMPLE-ERROR: The foreign symbol "SHGetFolderPathA" is undefined. Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [ABORT] Exit debugger, returning to top level. (SB!FASL::COLD-FOREIGN-SYMBOL-ADDRESS "SHGetFolderPathA") 0] * //testing for consistency of first and second GENESIS passes diff: output/genesis-2: No such file or directory error: header files do not match between first and second GENESIS Why? Thanks! -- WBR, Yaroslav Kavenchuk. |
From: James B. <ja...@ja...> - 2006-01-25 17:32:11
|
Yaroslav Kavenchuk <kav...@je...> writes: > How add function from other dynamic library? > > I add to win-32oc.c > > #include <shlobj.h> > ... > void scratch(void) > { > ... > SHGetFolderPathA(0, 0, 0, 0, 0); > ... > > and 'define-alien-routine' in win32.lisp. > > Result: sbcl.exe compile is ok, but check of foreign symbol table is broken: > > ... > "sjl_once.3" = #X 410168 > > debugger invoked on a SIMPLE-ERROR: > The foreign symbol "SHGetFolderPathA" is undefined. Look at the sbcl.nm file for the SHGetFolderPathA symbol, and it will have a stdcall decoration like '@12', which you will need to use as the function name in your DEFINE-ALIEN-ROUTINE form. See the other definitions in win32.lisp for examples of this. James |
From: Yaroslav K. <kav...@je...> - 2006-01-26 08:20:36
|
James Bielman wrote: > Look at the sbcl.nm file for the SHGetFolderPathA symbol, and it will > have a stdcall decoration like '@12', which you will need to use as > the function name in your DEFINE-ALIEN-ROUTINE form. See the other > definitions in win32.lisp for examples of this. Many thanks! -- WBR, Yaroslav Kavenchuk. |