What's the point of constraining Tin if it's always going to be a string?
class Test 
{ 
   public void Foo<Tout>(string val, Converter<string,Tout> conv) 
   { 
      myObj = conv(val); 
   } 
} 
Just get rid of the Tin type and use string in your Converter. I think you're over-complicating things.
You cannot use string as a generic constraint as it's a sealed class. This makes perfect sense as nothing can inherit from string so why add a constraint for string?
I.e. If you COULD inherit from string:
public SuperString : string
Then you could use string as a constraint and pass through SuperString as Tin. However you CANNOT do this as string is a sealed class. Therefor the only object you could pass to Tin is String anyway. 
Because of this, you may as well get rid of Tin and use the code I wrote above.