如何在C#写的dll 里调用回调函数? 110

dll是用C#写的。用一个其他的客户端去调用(C++,Delphi等)。例如,一个c++写的程序,引用c#写的dll,并调用dll中的一个函数,该c#函数执行完后,调用c... dll 是用C# 写的。用一个其他的客户端去调用(C++,Delphi等)。
例如,一个c++写的程序,引用c#写的dll, 并调用dll中的一个函数,该c#函数执行完后,调用c++程序的一个回调函数,以便通知c++, 事情做完了,并传回一些数据。
在百度搜索的全都是反过来的例子。恳请赐教,并提供最简单的例子。谢谢
展开
 我来答
wenqs
2012-11-21 · TA获得超过444个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:157万
展开全部
反过来比较容易,因为C#的P/Invoke就是做这个的。但是显然C++没有关于C#代码回调的的实现,因为C++的架构从来也没考虑过还会调用C#(这种情况实在是太少见了,况且也不必要)。如果非要实现可以采用多进程,使用进程间通信。我想到的:
1.模仿linux中的管道(PIPE),产生虚拟文件,而C++阻塞直到文件产生或本身超时。这样可以实现数据交换,既能实现传数据又可以使C++程序及时得到通知。缺点就是IO密集,降低效率。
2.使用TCP通信,监听端口获取消息,这是跨平台程序通信最常用也是最正统的方法。一般是跨操作系统编程常用的,比如windows和linux ubuntu server程序进行交互。你所述情况虽然不算跨操作系统通信,但是也是跨平台了。而且想想就知道C++作为先出现的语言而且是编译型语言,调用C#托管区的函数还要设回调,其难度可想而知。
3.如果你的C++是基于winform的,可以在C#中P/Invoke调用winAPI的SendMessage发送窗体消息从而间接实现回调。
4.自然还有一些更底层的Dirty方法,比如嵌汇编更改上下文程序指针地址。。。不过不适合正统的程序,因为太Dirty啊。。。而且出错概率大。
除此之外,如果不采用多线程通信,C#的反射(reflection)特性可以参考,但是控制权依然在C#。况且C#无从知道C++的内部结构,自然难以直接调用。你想想吧,是不是这个道理~
宇宙之心眼
2012-11-25 · TA获得超过623个赞
知道小有建树答主
回答量:610
采纳率:100%
帮助的人:416万
展开全部
在C++里面写
if(调用C#里面的函数返回值为true)
{
执行C++完成后的函数
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰冰_老诘子
2012-11-26
知道答主
回答量:3
采纳率:0%
帮助的人:4612
展开全部
通过反射
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式