in reply to Re: Re: Re: Re: Re: Win32 Shared Memory
in thread Win32 Shared Memory

Ok, cool, that worked :D

One problem: I now get an error from Windows.

Here's the code:

#!/usr/bin/perl use warnings; use strict; use Win32::API; my $STANDARD_RIGHTS_REQUIRED = (0x000F0000); my $SECTION_QUERY = 0x0001; my $SECTION_MAP_WRITE = 0x0002; my $SECTION_MAP_READ = 0x0004; my $SECTION_MAP_EXECUTE = 0x0008; my $SECTION_EXTEND_SIZE = 0x0010; my $SECTION_ALL_ACCESS = ($STANDARD_RIGHTS_REQUIRED|$SECTION_Q +UERY| $SECTION_MAP_WRITE |$SECTION_MAP +_READ| $SECTION_MAP_EXECUTE |$SECTION_EXT +END_SIZE); Win32::API->Import('kernel32', 'HANDLE OpenFileMapping(DWORD dwDesired +Access, BOOL bInheritHandle, LPCTSTR lpName)'); Win32::API->Import('kernel32', 'LPVOID MapViewOfFile(HANDLE hFileMappi +ngObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFile +OffsetLow, SIZE_T dwNumberOfBytesToMap)'); my $C3_mem = "Creatures 3_mem"; my $mem_handle = OpenFileMapping($SECTION_ALL_ACCESS, 0, $C3_mem); my $mem_ptr = MapViewOfFile($mem_handle, $SECTION_ALL_ACCESS, 0, 0, 0) +;

WinXP just throws a 'This program encountered an error' blah blah blah error.

Replies are listed 'Best First'.
Re+: Win32 Shared Memory
by BrowserUk (Patriarch) on May 16, 2004 at 00:29 UTC

    Did you check to see whether anything is being returned by OpenFileHandle()?

    Try

    my $mem_handle = OpenFileMapping( $SECTION_ALL_ACCESS, 0, $C3_mem ) or die "OpenFileHandle failed with: $^E";

    See $EXTENDED_OS_ERROR for the explanation of $^E.


    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "Think for yourself!" - Abigail
      Ok, now it's saying that the system could not find the file specified... I have the game running, so the file should exist...

        Sorry, that's a problem I can't help you with as I don't have the game.

        About the best suggestion I can come up with is that you download one of the compiled utilities from the page you linked earlier and see if that can access the shared memory.

        If it can, and your code still cannot, then I don't know what else to suggest.


        Examine what is said, not who speaks.
        "Efficiency is intelligent laziness." -David Dunham
        "Think for yourself!" - Abigail