Reference to vars into structs at runtime

Posted on 1998-11-20
Last Modified: 2010-04-15
Hi guys!, well i'm implementing pseudo-SQL support in our corporate software, and there is no repository of structs definitions, and what I need is to inject SQL commands and transate them into internal messages, but the problem is

  how do I resolve the ofset of a var into a struct by name?


I mean something like this
   SELECT Name, Addr, Tel
   FROM Clients
   WHERE Flg=0x006A AND ZIP=Zip.Get("2345")

the objects (Clients, ....) are hardware written into the proccess who parses the command, but I don't know how to resolve the names of the Clients struct into ofset struct, and of course, the type and the size.

I'm using gcc 2.7.2 on Linux, maybe there is some defined macros to resolve this, or will have to program a repository of objects and a composition of fields (with name, size, ofset,...).

Thank you!
Question by:trickle
LVL 10

Expert Comment

ID: 1254508
Do you the compontents of the structure or to you nothing about it. If you know nothink about the structure it will be impossible since at runtime all references to the components are resolved be pointer with no information about the name, the size and the type. Otherwise you should be able to to a parse of the structure at the compile-time to generate some Macros which will help you to access the structure. Pls give me more information, so I will be able to help you.

Expert Comment

ID: 1254509
Store a _duplicate_ table of the names and scan this, for the reason rbr says

typedef struct {
 char szName[128] ;

Then in _duplicate_ information table store
SADDRESS is the name of a struct called SADDRESS thru the "SQL" interface

szName is at offset 0 in SADDRESS, and called "Name" in the "SQL" interface and is a null terminated string.

Author Comment

ID: 1254510
Ok!, but what I don't want is to write an array with all the vars and its ofsets, name and somewhat the type.

I know the macro Ofsetof(TYPE, MEMBER) can resolv at compile time the vars in the struct, but is a little tedious.
I just want to know if exists a way o dinamically reference a var by name, I mean just like gdb with the symbols inside (compiled with debug info).

Thank U!


Expert Comment

ID: 1254511
There may be a compiler specific way, but there is no standard C way...the C standard does not specify anything about how/if symbol tables should be stored.

If there is a compiler specific way it is specific to the debug info generated by your compiler.

As you're using GNU you can download the compiler/debugger source, and figure out how it stores the symbol table.  Sadly this is probably more work (and a lot more fragile) than doing it the "hard" way
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

LVL 11

Expert Comment

ID: 1254512
#define offsetof(structure, member) (size_t)&(((structure*)0)->member)

Expert Comment

ID: 1254513
Alexo - That's compile time

I understand correctly, the Questioer wants - runtime resolution of names....which ain't really C/C++'s bag...


Expert Comment

ID: 1254514
FYI, i don't know about linux, but if it was HPUX you could try shl_findsym. (man shl_load)

maybe in linux there is some kind of equivalent call

Expert Comment

ID: 1254515
Yep, check out you man pages for dlopen(), dlsym() and dlclose(). It still doesn't
buy you much though, because structure members don't have any linkage at all.

kind regards,

Jos aka

Accepted Solution

semuel earned 200 total points
ID: 1254516
Hello There.

the answer is simple: you cann't. you cann't even count on that one struct will be build the same as his "brother".

anyway, databases are very diffecult thing to do.

if you want to be able to make "structs" at runtime, you'll have to do this through your oun data structure, like a linked list were every item had two strings: one for his name, and one for his value. it's, of course, a very simple and not efficient data structure, but it's an example.

anyway, it won't be an easy work.

Semuel Fomberg.

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.

760 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now