c++builder - Alternative to symlink in C++ Builder -
i'm trying integrate c code written unix in c++ builder. part of code using function symlink :
if(!fname || (use_real_copy ? real_copy(path, fname) : symlink(path, fname))
i don't know how replace works in c++ builder windows 64 bits, i've found functions createsymboliclinkw , createsymboliclinka seem equivalent windows c++ builder can't find them.
do have idea of how can around problem?
thank you.
createsymboliclink()
declared in winbase.h
, #include
'd windows.h
, #include
'd vcl.h
in vcl-based projects. if not creating vcl project, make sure have #include <windows.h>
statement in code. either way, make sure _win32_winnt
defined @ least 0x0600
(vista+).
if compiler still complains createsymboliclink()
undefined must using old version of c++builder (createsymboliclink()
added c++builder's copy of winbase.h
in c++builder 2007), in case have declare createsymboliclink()
manually in own code, eg:
#define symbolic_link_flag_directory (0x1) #define valid_symbolic_link_flags symbolic_link_flag_directory // & whatever other flags think of! winbaseapi boolean apientry createsymboliclinka ( __in lpcstr lpsymlinkfilename, __in lpcstr lptargetfilename, __in dword dwflags ); winbaseapi boolean apientry createsymboliclinkw ( __in lpcwstr lpsymlinkfilename, __in lpcwstr lptargetfilename, __in dword dwflags ); #ifdef unicode #define createsymboliclink createsymboliclinkw #else #define createsymboliclink createsymboliclinka #endif // !unicode
but have problem tackle - version of c++builder not have createsymboliclinka
, createsymboliclinkw
symbols in copy of kernel32.lib
linking exported functions in kernel32.dll
. have create new .lib
import library modern kernel32.dll
includes symbols, , add project. @ point, easier dynamically load createsymboliclink()
@ runtime using getprocaddress()
instead:
typedef boolean (apientry *lpfn_csl)(lpctstr, lpctstr, dword); lpfn_csl lpcreatesymboliclink = (lpfn_csl) getprocaddress(getmodulehandle(text("kernel32")), #ifdef unicode "createsymboliclinkw" #else "createsymboliclinka" #endif ); if (lpcreatesymboliclink) { // use lpcreatesymboliclink(...) needed... }
which allow code run on xp , earlier (if needed), since createsymboliclink()
added in vista.
Comments
Post a Comment