DWORD_PTR SHGetFileInfo(          LPCTSTR pszPath,
    DWORD dwFileAttributes,
    SHFILEINFO *psfi,
    UINT cbFileInfo,
    UINT uFlags
);
转为[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(  string pszPath, 
  FILEATTRIBUTE dwFileAttributes, 
  out SHFILEINFO psfi, 
  uint cbFileInfo, 
  SHGFI uFlags);运行时一切OK,
但是在C++时有时这样子调用第一个参数为(LPCTSTR)pidl其中pidl为一个结构的指针,在C++的调用中把它强制转为LPCTSTR类型了。
请问我要如何设计托管函数??我试着把第一个参加变加Inptr,但是结果不行。

解决方案 »

  1.   

    在 C# ,你可以使用重载来完成这个功能。记得 LPCTSTR 在 C# 中应该对应 String,你可以重载一个函数,使用的参数为 String pid1
      

  2.   

    这个我知道。
    但是我现在是有一个C#的Intptr的实例,要传C++原型为LPCTSTR的指针。
      

  3.   

    IntPtr intPtr ;
    intPtr.ToString() 不就行了?
      

  4.   

    这个怎么行?intptr.ToString()是什么东东?在C++的原型中,第一个参数是可以接收可变字符串指针,我所以的是,因为有其他原因,在C++中把一个非字符串指针(可能是一个结构指针)强制转为字符串指针传递给参数。在C#中就出问题了,因为没有进行指针类型的转换。
      

  5.   

    对不起,是StringBuilder就可以解决问题
      

  6.   

    用[MarshalAs(UnManageredType.LPCSTR)]不行吗?
      

  7.   

    [MarshalAs(UnManageredType.LPCSTR)]
    这个不行,有这样强制转换过,