日期:2014-05-19  浏览次数:20849 次

如何让IntPtr指向一个字符串
IntPtr   idp=   IntPtr.Zero;
StringBuilder   idata   =   new   StringBuilder( "000000 ");
string   idata   = "000000 ";
我这样建立的2个idata字符串,如何让idp指向他
我指向他的目的是为了传递给dll的某个函数,他需要传指针
还有我定义了一个结构如何向dll的函数传递其指针?
http://community.csdn.net/Expert/topic/5612/5612998.xml?temp=.9482843

http://community.csdn.net/Expert/topic/5614/5614773.xml?temp=.5012018
所有分了,解决一起结了。

------解决方案--------------------
char[] charArray = StringBuilder.ToString().ToCharArray();
unsafe
{
fixed(char* p = &charArray[0])
{
//p就是字串首地址
}
}
------解决方案--------------------
http://msdn2.microsoft.com/en-us/library/s97shtze(VS.80).aspx
------解决方案--------------------
//参考标准API如何实现的

[DllImport( "user32.dll ")]
public static extern int GetWindowText(IntPtr hWnd,
StringBuilder lpString, int nMaxCount);

private void button1_Click(object sender, EventArgs e)
{
StringBuilder vStringBuilder = new StringBuilder(256);
GetWindowText(Handle, vStringBuilder, vStringBuilder.Capacity);
Console.WriteLine(vStringBuilder.ToString());
}

------解决方案--------------------
用GCHandle.Alloc(object obj)方法来给string分配一个指针!
------解决方案--------------------
能不能把你的DLL拿过来让我看看??
------解决方案--------------------
举个例子
[DllImport( "user32.dll ")]
public static extern IntPtr SendMessage(HandleRef hWnd, int msg, ref int wParam, ref int lParam);
如果Api方法需要返回这个参数,那么就用ref string paramname来定义参数。