Thread overview
Linker doesn't find a Win32 API function
Aug 10, 2005
Niko Korhonen
Aug 10, 2005
ElfQT
Aug 10, 2005
Shawn Liu
Aug 10, 2005
Shawn Liu
Aug 10, 2005
Shawn Liu
August 10, 2005
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
August 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


August 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


August 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
>
> 


August 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
>>
>>
>
>