首页 新闻 会员 周边

c#调用c++的DLL类指针的封装问题

0
悬赏园豆:100 [已解决问题] 解决于 2015-03-13 09:52

c++窗体方法中有一个参数为(long)this,将这个方法封到c#中此参数该怎么封?(此方法需封在c#的一个类中。并不在窗体中)

问题补充:

急,在线等!

史蒂芬周的主页 史蒂芬周 | 初学一级 | 园豆:76
提问于:2015-03-12 15:52
< >
分享
最佳答案
0

如果在 C++ 代码中将 this 转换成了 long,那么你在 C# 中,用 Int32 表示就行了。

收获园豆:100
Launcher | 高人七级 |园豆:45045 | 2015-03-12 16:41

这个我知道,关键是这个方法在c++中调用时传的参数值为(long)this,那我在c#中应该给这个参数赋什么?

史蒂芬周 | 园豆:76 (初学一级) | 2015-03-12 16:49

@史蒂芬周: 你把代码贴出来

Launcher | 园豆:45045 (高人七级) | 2015-03-12 16:53

@Launcher: 

if (m_AlarmProVer.GetCurSel() == 0)
{
IAP_SetOnReportResult(OnReportResult, (LONG)this);
} else if (m_AlarmProVer.GetCurSel() == 1) {
IAP_SetOnReportResultEx(OnReportResultEx, (LONG)this);
}

OnReportResult是一个回调函数

方法IAP_SetOnReportResult在c#一个类中,在窗体代码中实例化这个类后调用这个方法,其中这个方法的第二个参数我不知道怎么传

史蒂芬周 | 园豆:76 (初学一级) | 2015-03-12 17:00

@史蒂芬周: 请问,在 C++ 中,this 表示的是哪个类?

Launcher | 园豆:45045 (高人七级) | 2015-03-12 17:33

@Launcher: 当前调用此方法的对话框

史蒂芬周 | 园豆:76 (初学一级) | 2015-03-12 17:41

@史蒂芬周: 那你在 C# 中就要需要对应的数据结构,然后通过 Marshal.StructureToPtr 转换成 IntPtr.ToInt32() 的值传给 IAP_SetOnReportResult。

Launcher | 园豆:45045 (高人七级) | 2015-03-12 17:46

@Launcher: 具体怎么用能举个例子吗?谢谢!方法IAP_SetOnReportResult在类CLASS1中,怎样通过Marshal.StructureToPtr得到参数呢?

史蒂芬周 | 园豆:76 (初学一级) | 2015-03-12 20:06

@史蒂芬周: 你把 C++ 代码贴出来

Launcher | 园豆:45045 (高人七级) | 2015-03-13 09:16

@Launcher: 问题已经解决了,不是这个参数的问题,这个参数c#用不到,c++里面的那个结构体在c#里面封成ref竟然好了,这个结构体又没加指针,晕,还是谢谢你啦,结贴。

史蒂芬周 | 园豆:76 (初学一级) | 2015-03-13 09:52
其他回答(1)
1

句柄吧?用IntPtr就好了。

XiaoFaye | 园豆:3087 (老鸟四级) | 2015-03-12 16:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册