digitalmars.D.learn - Linker doesn't find a Win32 API function
- Niko Korhonen (22/22) Aug 10 2005 I'm trying to use the SetFilePointerEx function from Win32 API in a
I'm trying to use the SetFilePointerEx function from Win32 API in a piece of D software, like this: <code> extern (Windows) { BOOL SetFilePointerEx( HANDLE hFile, long distanceToMove, long* newFilePointer, DWORD moveMethod); } </code> According to Win32 API specs from MSDN such a function exists, but the linker gives an error when trying to compile the program: Error 42: Symbol Undefined _SetFilePointerEx 20 I'm guessing the KERNEL32.LIB in the DMC package doesn't include the more recent (W2k+) Win32 API functions. What can I do here? Do I need to make a custom KERNEL32.LIB for my project? And if I do, how do I do that? -- Niko Korhonen SW Developer
Aug 10 2005
I don't know if that's the ultimate solution, but IMPORTS section in .def file works. Eg. EXETYPE NT SUBSYSTEM WINDOWS IMPORTS _Direct3DCreate9 4=d3d9.Direct3DCreate9 You need _SetFilePointerEx 20=<Dmudule>.SetFilePointerEx ElfQT "Niko Korhonen" <niktheblak hotmail.com> wrote in message news:ddcsnp$2p2v$1 digitaldaemon.com...I'm trying to use the SetFilePointerEx function from Win32 API in a piece of D software, like this: <code> extern (Windows) { BOOL SetFilePointerEx( HANDLE hFile, long distanceToMove, long* newFilePointer, DWORD moveMethod); } </code> According to Win32 API specs from MSDN such a function exists, but the linker gives an error when trying to compile the program: Error 42: Symbol Undefined _SetFilePointerEx 20 I'm guessing the KERNEL32.LIB in the DMC package doesn't include the more recent (W2k+) Win32 API functions. What can I do here? Do I need to make a custom KERNEL32.LIB for my project? And if I do, how do I do that? -- Niko Korhonen SW Developer
Aug 10 2005
Yes. make a custom KERNEL32.LIB // file your_kernel32.def LIBRARY 'KERNEL32.DLL' EXPORTS _SetFilePointerEx 20 = SetFilePointerEx // end of file your_kernel32.def run in the command line: implib.exe your_kernel32.lib your_kernel32.def then link with your_kernel32.lib and the kernel32.lib comes with DMC implib.exe is "Digital Mars Import Library Manager". It comes with DMC or can be download from D page ftp://ftp.digitalmars.com/bup.zip "Niko Korhonen" <niktheblak hotmail.com> ??????:ddcsnp$2p2v$1 digitaldaemon.com...I'm trying to use the SetFilePointerEx function from Win32 API in a piece of D software, like this: <code> extern (Windows) { BOOL SetFilePointerEx( HANDLE hFile, long distanceToMove, long* newFilePointer, DWORD moveMethod); } </code> According to Win32 API specs from MSDN such a function exists, but the linker gives an error when trying to compile the program: Error 42: Symbol Undefined _SetFilePointerEx 20 I'm guessing the KERNEL32.LIB in the DMC package doesn't include the more recent (W2k+) Win32 API functions. What can I do here? Do I need to make a custom KERNEL32.LIB for my project? And if I do, how do I do that? -- Niko Korhonen SW Developer
Aug 10 2005
BTW, it should be _SetFilePointerEx 16 since D's long is a 64 bit variable, while long in WIN32 is 32 bit change the declaration as extern (Windows) { BOOL SetFilePointerEx( HANDLE hFile, int distanceToMove, int* newFilePointer, DWORD moveMethod); } "Shawn Liu" <liuxuhong.cn gmail.com> wrote:ddd8qv$8p9$1 digitaldaemon.com...Yes. make a custom KERNEL32.LIB // file your_kernel32.def LIBRARY 'KERNEL32.DLL' EXPORTS _SetFilePointerEx 20 = SetFilePointerEx // end of file your_kernel32.def run in the command line: implib.exe your_kernel32.lib your_kernel32.def then link with your_kernel32.lib and the kernel32.lib comes with DMC implib.exe is "Digital Mars Import Library Manager". It comes with DMC or can be download from D page ftp://ftp.digitalmars.com/bup.zip "Niko Korhonen" <niktheblak hotmail.com> ??????:ddcsnp$2p2v$1 digitaldaemon.com...I'm trying to use the SetFilePointerEx function from Win32 API in a piece of D software, like this: <code> extern (Windows) { BOOL SetFilePointerEx( HANDLE hFile, long distanceToMove, long* newFilePointer, DWORD moveMethod); } </code> According to Win32 API specs from MSDN such a function exists, but the linker gives an error when trying to compile the program: Error 42: Symbol Undefined _SetFilePointerEx 20 I'm guessing the KERNEL32.LIB in the DMC package doesn't include the more recent (W2k+) Win32 API functions. What can I do here? Do I need to make a custom KERNEL32.LIB for my project? And if I do, how do I do that? -- Niko Korhonen SW Developer
Aug 10 2005
_SetFilePointerEx 20 is right. I checked MSDN again. LARGE_INTEGER is 64 bit. Sorry for my carelessness."Niko Korhonen" <niktheblak hotmail.com> ??????:ddcsnp$2p2v$1 digitaldaemon.com...I'm trying to use the SetFilePointerEx function from Win32 API in a piece of D software, like this: <code> extern (Windows) { BOOL SetFilePointerEx( HANDLE hFile, long distanceToMove, long* newFilePointer, DWORD moveMethod); } </code> According to Win32 API specs from MSDN such a function exists, but the linker gives an error when trying to compile the program: Error 42: Symbol Undefined _SetFilePointerEx 20 I'm guessing the KERNEL32.LIB in the DMC package doesn't include the more recent (W2k+) Win32 API functions. What can I do here? Do I need to make a custom KERNEL32.LIB for my project? And if I do, how do I do that? -- Niko Korhonen SW Developer
Aug 10 2005