首页 新闻 会员 周边

IntPtr问题

0
悬赏园豆:10 [已解决问题] 解决于 2009-04-11 16:55

public aaa(IntPtr myPtr,int left, int top, int width, short height)
在这个构造函数里,IntPtr怎么赋值???

我一直不明白

还有IntPtr究竟是什么类型?

问题补充: 怎么实例化这个东西? API函数刚刚才学,还有好多不明白的地方 有没有好资料供学习啊
精神信仰的主页 精神信仰 | 初学一级 | 园豆:190
提问于:2009-04-10 22:54
< >
分享
最佳答案
0

public aaa(IntPtr myPtr,int left, int top, int width, short height)

这里myPtr应该是对应到一块内存,你需要查看aaa函数是如何把myPtr转化成它内部要使用的结构体的(一般都是结构体,也可能是其它对象,比如数组)。

然后,你需要在你的托管代码中,定义该结构体,使用StructLayout特性,对结构体的字段使用MarshalAs特性,类似这样:

 

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 13)]
public struct A101220Output
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst
= 11)]
public string TransactionAccountID;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst
= 2)]
public string IsAuthenticated;
}

然后在需要使用的地方,获取该结构体对象的IntPtr,如下:
//创建托管对象
A101220Output output = new A101220Output ();
output.TransactionAccountID
= "11000000841";
output.IsAutienticated
= "false";

//分配非托管内存,并获取非托管内存地址起始位置指针
int size = Marshal.SizeOf(output);
IntPtr buffer
= Marshal.AllocHGlobal(size);

try
{
//将托管对象拷贝到非托管内存
Marshal.StructureToPtr(output, buffer, false);

//调用非托管方法
aaa.(buffer,0,0,640,480);
}
finaly
{
//释放非托管内存
Marshal.FreeHGlobal(buffer);
}

Launcher | 高人七级 |园豆:45045 | 2009-04-11 13:31
其他回答(3)
0

IntPtr 是指针

Sharper代码人生 | 园豆:225 (菜鸟二级) | 2009-04-10 23:36
0

看下面这篇

http://www.cnblogs.com/freeliver54/archive/2008/10/15/1311371.html

eaglet | 园豆:17139 (专家六级) | 2009-04-11 09:18
0

一般窗体的句柄: 可以直接获取Handle;

其他参数:可以用Int 进行转换;

winzheng | 园豆:8797 (大侠五级) | 2009-04-11 15:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册