No. You make a wrong assumption.

TypeInfo will return the DECLARED type of S.

Not the type that was actually passed when calling the routine:
That has been converted to the declared type of S by the compiler even
before the routine ShowType is called.

You're right.
Well is there another way to do I showed before?
I want to create a record/object type to receive a "string" but I need
to know which string type was before.

There is no way.


If I change the code (see below) to use Pointer type it works but I
think this is won't help me.

No, it will not help you.

One thing you can do is use overloading:

TStringType = (stAnsi,stUnicode,stUTF8);

Procedure DoSomeStringOperation(S : Pointer; AStringType : TStringType);

begin
  // Whatever
end;

Procedure DoSomeStringOperation(S : Ansistring);

begin
  DoSomeStringOperation(Pointer(S),stAnsi);
end;

Procedure DoSomeStringOperation(S : UnicodeString);

begin
  DoSomeStringOperation(Pointer(S),stUnicode);
end;

Procedure DoSomeStringOperation(S : UTF8String);

begin
  DoSomeStringOperation(Pointer(S),stUTF8);
end.

The compiler will choose the correct overloaded version, and you will know 
which one she picked.

But it would help to know what exactly you want to achieve.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to