procedure TForm3.ReadTest;
var
  bytData: WideString;
begin
  SetLength(bytData,currentLength div SizeOf(WideChar));
  MemDB.Read(@bytData[1]); //主要是这里
  SetLength(bytData,0);
end;procedure TShareMemory.Read(bytData: Pointer); //还有这里
begin
  CopyMemory(bytData, m_pwDataRead, m_length); //这里我在C#还是引用了API来搞
end;
C#的CopyMemory我这样整的
[DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory", CharSet = CharSet.Ansi)]
  public extern static long CopyMemory(IntPtr dest, IntPtr source, int size);   
问题主要还是在C#里面的指针应该咋个整法,用委托替代吗? 如果是的话这边应该如何处理呢。
初学C# 望高手赐教! O(∩_∩)O 谢谢 !!!

解决方案 »

  1.   

    new IntPtr (……)有4个重载,其中一个允许输入指针,调用的话
    CopyMemory(new IntPtr(dest), new IntPtr(source),size);使用指针,要申明unsafe   
      

  2.   

    另外,楼主你非要逐句翻译吗?
    这个delphi程序很简单,就是从个二进制数组的一部分把数据读到一个widestringc#有很多可以便捷处理的方法比如byte[]有copyto方法,实现的就是你要用CopyMemory要做的事或者
    UnicodeEncoding encoding = new UnicodeEncoding( );  
    string str = encoding.GetString(by,index);
    直接就能完成你所有的要求了