关于dll动态库在C#中的应用?解决思路

关于dll动态库在C#中的应用?
我设计了一个基于MFC   AppWizard(dll-> Regular   Dll   using   shared   MFC   Dll的动态库.
试例代码如下://动态库代码
extern   "C "   __declspec(dllexport)   CString   Add(CString   a)
{
          AFX_MANAGE_STATE(AfxGetStaticModuleState());
          TRACE( "Entering   DllAdd\n ");

          return   a;
}
C#代码:
[DllImport( "DllDemo5.dll ",CharSet=CharSet.Auto)]
public   static   extern   string   Add(string   s);

private   void   Page_Load(object   sender,   System.EventArgs   e)  
{
        string   s=(Add( "输入结果 "));
        Response.Write( "s= "+s);
}  
结果网页报告错误:
        异常详细信息:   System.NullReferenceException:   未将对象引用设置到对象的实例。
        行   32:   string   s=(Add( "输入结果 "));
但是如果把动态库中的CString   和C#中的string都换成   char或int等其它的,则程序正确.网页页面上能输出 "输入结果 "这串字符串.
请问这是为什么呢?我要传入字符串,要如何修改呢?


------解决方案--------------------
lpstr = str.GetBuffer(); (VC7)

------解决方案--------------------
C#的string 等于C++的char *
至于C++的CString是一个复杂的结构,C#中没有直接的类型对应
可以自己写一个完全对应的结构代替