in reply to Re^4: Use Windows wimgapi dll
in thread Use Windows wimgapi dll

thanks for your answer ...
I added "\0" to the string but there is no change.
I dont get any error message it just returns 0 as filehandle.
my $hWim = $wimfile->Call(... #returns 0 see code above
"sry for double post"

Replies are listed 'Best First'.
Re^6: Use Windows wimgapi dll
by Anonymous Monk on Aug 04, 2008 at 12:40 UTC
    You haven't added
    use strict; use warnings;
      I added GetLastError ... here is my errormsg. it die when trying to call WIMCreateFile. The paramter is incorrect
      use Win32::API; use Data::Dumper; use Win32; use strict; use warnings; use Encode qw( encode ); my $filehandler = encode('UCS-2le', "C:\\test.wim\0"); my $wimfile = new Win32::API("wimgapi", "WIMCreateFile", ['P','C','C', +'C','C','N'], 'C')or die Win32::FormatMessage(Win32::GetLastError); my $LLHandle = $wimfile->Call($filehandler, 'WIM_GENERIC_WRITE', 'WIM_CREATE_NEW', 0, 0, 0)or die Win32::FormatMessage(Win32::GetLas +tError); print $LLHandle;
      any ideas =) THANK YOU
        ok i made it ... i had to replace C with N for Dwords. Thanks for your help ...
        What using strict/warning should have pointed out is that WIM_GENERIC_WRITE, WIM_CREATE_NEW are undefined. Changing that to
        'WIM_GENERIC_WRITE', 'WIM_CREATE_NEW',
        is garbage (probably turned into 0). You need actual numbers, like
        #!/usr/bin/perl -- use strict; use warnings; use constant WIM_Flag_Verify => 0x00000002; use constant WIM_Flag_Index => 0x00000004; use constant WIM_Flag_No_Apply => 0x00000008; use constant WIM_Generic_Read => 0x80000000; use constant WIM_Generic_Write => 0x40000000; use constant WIM_Open_Existing => 0x00000003; use constant WIM_Flag_Share_Write => 0x00000040; use constant WIM_Flag_FileInfo => 0x00000080; use constant WIM_Compress_None => 0x00000000; use constant WIM_Create_New => 0x00000001; use constant WIM_Create_Always => 0x00000002; die WIM_Generic_Write; __END__ 1073741824 at - line 16.
Re^6: Use Windows wimgapi dll
by iea (Beadle) on Aug 04, 2008 at 11:33 UTC
    Here is my code ...
    use Win32::API; use Data::Dumper; use Encode qw( encode ); #API FUNCTION WIMCreateFile # HANDLE # WINAPI # WIMCreateFile( # LPWSTR lpszWimPath, # DWORD dwDesiredAccess, # DWORD dwCreationDisposition, # DWORD dwFlagsAndAttributes, # DWORD dwCompressionType, # LPDWORD lpdwCreationResult # ); my $filehandler = encode('UCS-2le', "C:\\test.wim"); #Code example in C #TCHAR *wimFile = TEXT("C:\\sample_image.wim"); my $wimfile = new Win32::API("wimgapi", "WIMCreateFile", ['P','N','N', +'N','N','N'], 'N'); my $hWim = $wimfile->Call($filehandler, WIM_GENERIC_WRITE, WIM_CREATE_NEW, 0, 0, 0); #Code example in C # hWim = WIMCreateFile ( wimFile, //exis +ting .wim file to append to # WIM_GENERIC_READ | WIM_GENERIC_WRITE, //acce +ss mode # WIM_OPEN_EXISTING, //open + flag # 0, // or +WIM_FLAG_VERIFY flag for file corruption check # 0, # &created ); print $hWim;