日期:2014-05-18  浏览次数:20958 次

如何将以下的C#代码转换为C++代码?
运行环境:vs2008 wince6.0
问题: 有以下一段C#的代码,现在我需要使用C++实现同样的功能,不知道该怎么修改?


  /// <summary> 
  /// Gets a stream handle for the given filename 
  /// </summary> 
  public static IntPtr GetStream(string filename)
  {
  // Get the filename in bytes 
  byte[] filenamebytes = System.Text.Encoding.Default.GetBytes(filename + null);

  // Get a handle depending on which framework we are using 
  GCHandle hfile = GCHandle.Alloc(filenamebytes, GCHandleType.Pinned);

  if (Environment.Version.Major == 1) return new IntPtr(hfile.AddrOfPinnedObject().ToInt32() + 4);
  else return hfile.AddrOfPinnedObject();
  }

调用时:

  //create a handle to hold the track stream - REPLACE HERE fmod_getStream BY fmod_getStream_New TO TRY WITHOUT THE AddrOfPinnedObject BUG FIX ! 
  IntPtr soundStreamName = Sound.GetStream(@"\NandFlash\Rolling in the Deep.mp3");

也就是说如何用C++实现GetStream()函数的功能,最好函数格式也能一致。

------解决方案--------------------
C++不需要实现GetStream()函数,C#中需要这个函数是实现以下功能:Unicode转ANSI;.Net中的托管内存要先固定,避免被GC移动,才能传递给非托管代码使用
------解决方案--------------------
该函数实现返回字符串的首地址,c++代码表示为:
char* GetStream(CString filename)
{
USES_CONVERSION;
char* ps = T2A(filename);
return ps;
}

调用:char* soundStreamName = GetStream(_T("\NandFlash\Rolling in the Deep.mp3"));