懂函数指针的进来帮忙 .............. 注意 不是委托和事件 是函数指针

问题描述

因为我要在C++中订阅C#编写的COM的事件.所以我希望在C#里通过unsafe的代码来声明函数指针,然后在C++里得到这个指针然后把某C++函数地址赋给该函数指针.请不要说什么用event之类的哈..publicpartialclassUserControl1:UserControl,ICom{unsafepublicvoid*prt;声明普通指针没问题但是本来函数指针在C++里应该是unsafepublicvoid(*prt)(intx,inty);但是编译不通.C#根本就不认识它..请问有没有高手知道如何才能使用函数指针阿?

解决方案

解决方案二:
c#里面publicpartialclassUserControl1:UserControl,ICom{publicintFunctionPointer;publicdelegatevoidFunctionInvoker(intx,inty);publicvoidInvokeFuncion(){Marshal.GetDelegateForFunctionPointer(newIntPtr(FunctionPointer),typeof(FunctionInvoker)).DynamicInvoke(32,43);}}在c++里面可以对FunctionPointer赋值然后调用InvokeFunction必须注意到的一点是你这个UserControl和C++代码必须在一个进程当中,否则指针地址肯定不正确的
解决方案三:
函数指针在C#里面用IntPtr类型参考也可以用使用委托
解决方案四:

解决方案五:
关注下
解决方案六:
谢谢2楼哈我知道怎么做了..强行把C++指针转换成long传到C#中,然后把这个long转换成委托就OK了..
解决方案七:
csdn中怎么没有C++论坛社区,如果有楼主的问题就有答案了,应该开个C++或C的论坛社区才行
解决方案八:
引用6楼my_zhanghuan的回复:

csdn中怎么没有C++论坛社区,如果有楼主的问题就有答案了,应该开个C++或C的论坛社区才行

谁说没有C++论坛

时间: 2024-10-06 15:12:49

懂函数指针的进来帮忙 .............. 注意 不是委托和事件 是函数指针的相关文章

c语言-求帮忙看下为什么程序调用了西沟函数导致程序整个不能运行

问题描述 求帮忙看下为什么程序调用了西沟函数导致程序整个不能运行 写说明一下代码,代码主要是要在控制台模拟浏览器对tab和网页前进后退的一些操作 再说明一下问题,问题在于brwosertab类和webinformation类的西沟函数,一旦在这两个类的西沟函数里面写上delete 指针名字:整个程序就不能运行了,最关键的是我不太明白为什么程序要调用这两个函数,因为我感觉我都是动态对象啊.最后说明一下,我很菜,只有一点java编程的经验,所以第一次应对c++我真的需要一些帮助.谢谢你们了! 解决方

java编程-有个java的问题想问问大家,欢迎进来帮忙解答下,谢谢

问题描述 有个java的问题想问问大家,欢迎进来帮忙解答下,谢谢 为什么这段代码运行结果0和3呢? public class Test { static int a; static int i=3; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(a+" "+i); } } 解决方案 静态Int变量默认为0 解决方案二: 是的,这个static变

编程-为什么派生类的指针指向基类对象 还可以调用派生类的函数?

问题描述 为什么派生类的指针指向基类对象 还可以调用派生类的函数? 想不明白啊,高手帮帮忙吧 Derived1 * hh = static_cast(new Base); hh->derivedfunction(); // 这里竟然是可以的 为什么呢 hh指向的是一个基类对象啊?? 而且即使derivedfunction里面用到派生类的私有成员也是可以的, 这到底是为什么啊??? 解决方案 虽然语法上让你通过了,static_cast是强制类型转换,所以语法没办法阻止你错误的做法,但是实际运行结

c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数。

问题描述 c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数. [code=c]extern "C" int __declspec(dllexport)add(int x, int y); extern "C" int __declspec(dllexport)*add1(); int add(int x, int y) { return x + y; } int *add1() { static int a[3]={1,2,3}; stati

mysql-求助MySQL的关于sql语句怎么写??三表的查询~~~请大神进来帮忙~~~~~

问题描述 求助MySQL的关于sql语句怎么写??三表的查询~~~请大神进来帮忙~~~~~ 现在我有三个表: 表1: pre_common_member_profile: uid(用户的uid), gender(性别), birthyear(出生的年), birthmonth(出生的月), birthday(出生的日) 表2: pre_home_friend: uid(用户的uid), fuid(加为好友的uid) 表3: pre_home_friend_request: fuid(发送好友请求

各位大神进来帮忙看下

问题描述 各位大神进来帮忙看下 这是什么问题,还要我把公司的项目通过SVN导入到自己电脑上,那么自己电脑上的Tomcat的路径需要修改嘛?怎么修改,知道的教下,谢谢 解决方案 提示的很清楚,文件或者路径不存在,自己检查下.

小白一只,程序是做好了的,就是自己一直调试不好,求懂的大神远程帮忙,调试好了可红包略表心意!

问题描述 小白一只,程序是做好了的,就是自己一直调试不好,求懂的大神远程帮忙,调试好了可红包略表心意! 2016-5-13 17:10:44 org.apache.catalina.core.AprLifecycleListener init 信息: Loaded APR based Apache Tomcat Native library 1.1.34 using APR version 1.5.1. 2016-5-13 17:10:44 org.apache.catalina.core.Ap

qt5-QT中QByteArray转换成QString,有遇到过的麻烦进来帮忙一下

问题描述 QT中QByteArray转换成QString,有遇到过的麻烦进来帮忙一下 我是用ZIGBEE串口收到温湿度数据后让QT编写的一个串口助手来读取之后显示在QLineEdit上 QByteArray temp = myCom->readAll(); 想把这个temp转换成QString类型,然后利用QStringList把数据分解出来显示在QLineEdit上,但是一直显示是空白, 在QTextBrowser上就可以显示.这个是什么问题呢?麻烦大神 解决方案 http://www.lin

后台程序调整 IT新手求大神进来帮忙

问题描述 后台程序调整 IT新手求大神进来帮忙 所属项目 口袋互联网金融项目 所属模块 后台程序调整 任务描述 个人账户--资金明细页面换成动态数据 现在的数据是写死在数据库里面的,现在经理的要求是让我把这个明细页面换成动态数据 解决方案 我靠,你这就求助,问题说明白了吗 解决方案二: 最好把原页面贴出来,然后把你要的效果说清楚 解决方案三: 现在的数据是写死在数据库里面的,现在经理的要求是让我把这个明细页面换成动态数据 解决方案四: 是不是在这页面进行可编辑的操作? 解决方案五: 你的意思是数