• C

Reference to vars into structs at runtime

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!
Who is Participating?
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.
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.
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.
Making Bulk Changes to Active Directory

Watch this video to see how easy it is to make mass changes to Active Directory from an external text file without using complicated scripts.

trickleAuthor Commented:
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!

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
#define offsetof(structure, member) (size_t)&(((structure*)0)->member)
Alexo - That's compile time

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

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
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 jos@and.nl
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.