Solved

Dynamic arrays from pointer

Posted on 2002-03-07
3
198 Views
Last Modified: 2010-04-05
I have got a pointer to a shared memory area.
In this area there is stored lets say 10 succesitive integers.
Now I want to access each of these integers in an array like syntax.

something like this

if sharedmem[1] = 10 then ..

Is that possible, I don't know the numbers at designtime. So it should be dynamic.
0
Comment
Question by:bnz
3 Comments
 
LVL 1

Accepted Solution

by:
SchweizerD earned 100 total points
ID: 6846994
I am assuming you can't use open arrays here. In that case you're restricted to typecasting:

type
   TIntArray = array[1..1000] of integer;
   PIntArray = ^TIntArray;
var
    SharedMem: PIntArray;
begin
   SharedMem := PIntArray(...)  ;
// substitute your pointer, assuming you have it, for the three dots

   // now:
   SharedMem^[1] := 12;
   if SharedMem^[1] = 10 then
// etc.

HTH
David
   
0
 
LVL 20

Expert Comment

by:Madshi
ID: 6847000
Yep, David is right. In my type definition base unit I'm declaring these types (and some more) for my convenience:

type
  // TAxxx = array [0..maxPossible] of xxx
  TAByte         = array [0..maxInt      -1] of byte;
  TAShortInt     = array [0..maxInt      -1] of shortInt;
  TAChar         = array [0..maxInt      -1] of char;
  TABoolean      = array [0..maxInt      -1] of boolean;
  TAExtBool      = array [0..maxInt      -1] of TExtBool;
  TAWord         = array [0..maxInt shr 1-1] of word;
  TASmallInt     = array [0..maxInt shr 1-1] of smallInt;
  TACardinal     = array [0..maxInt shr 2-1] of cardinal;
  TAInteger      = array [0..maxInt shr 2-1] of integer;
  TAPointer      = array [0..maxInt shr 2-1] of pointer;
  TAString       = array [0..maxInt shr 2-1] of string;
  TAIUnknown     = array [0..maxInt shr 2-1] of IUnknown;
  TAInt64        = array [0..maxInt shr 3-1] of int64;

  // TPAxxx = ^(array [0..maxPossible] of xxx)
  TPAByte        = ^TAByte;
  TPAShortInt    = ^TAShortInt;
  TPAChar        = ^TAChar;
  TPABoolean     = ^TABoolean;
  TPAExtBool     = ^TAExtBool;
  TPAWord        = ^TAWord;
  TPASmallInt    = ^TASmallInt;
  TPACardinal    = ^TACardinal;
  TPAInteger     = ^TAInteger;
  TPAPointer     = ^TAPointer;
  TPAString      = ^TAString;
  TPAIUnknown    = ^TAIUnknown;
  TPAInt64       = ^TAInt64;

Now I can always use something like the following without ever getting an out-of-bounds exception:

  if TPAInteger(sharedMemoryPointer)^[index] = blabla then ...

Regards, Madshi.
0
 

Author Comment

by:bnz
ID: 6847026
Ahh clever :)
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question