在COM中一属性:
BSTR CGrgXFSCashAcceptorCtrl::GetTest() 
{
CString strResult = "TEST";
return strResult.AllocSysString();
}1.在C#中是否需要释放内存????
2.如需要释放,怎么释放?(有没如SysFreeString的东东?)3.如不需要释放. 在C#中启一线程,在线程中:
   while (true)
   {
         string str = GetTest();
         System.Threading.Thread.Sleep(1);
   }  内存会一直增加.
  疑问:是否增加到一定程度系统会自行释放???

解决方案 »

  1.   

    使用 .NET 的 COM 包装器生成代码。
      

  2.   

    caozhy 谢谢你的回复.使用 .NET 的 COM 包装器生成代码。能详细点么?具体怎么弄?
      

  3.   

    C#可以自动释放的是托管资源。非托管资源不能自动释放。
    AllocSysString需要用函数FreeSysString手动释放
    http://msdn.microsoft.com/en-us/library/za1865s1(v=vs.71).aspx
      

  4.   

    ynb119 谢谢你的回复C#可以自动释放的是托管资源。非托管资源不能自动释放。
    AllocSysString需要用函数FreeSysString手动释放你的意思是需要在C#中手动释放
    请问C#中有没有FreeSysString这样的东东,如何使用?
      

  5.   


        System.Runtime.InteropServices.Marshal.FreeBSTR 
      

  6.   

    Marshal.FreeBSTR(p);
    Marshal.FreeHGlobal(p);在哪个函数(或类)中申请的就在那个函数(或类)中释放