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









"ElfQT" <dethjunk yahoo.com> 