• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > DCOM中接口函数的参数是否可以传递函数呢(高手救命呀!!!!!)

DCOM中接口函数的参数是否可以传递函数呢(高手救命呀!!!!!)

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了dcom接口,dcom是什么,9955dcom最近十天更新,8844dcom更新后地址,dcom配置等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: DCOM中接口函数的参数是否可以传递函数呢(高手救命呀!!!!!)
描述:

比如说我在dcom中要实现这样的函数:(这里简单写)
 f(f1,int a,int b)
  {f1(a,b);}
而f1是我们传递过去的参数,它是客户端定义的函数,
实现两个数的相加:
如f1(int a,int b){c=a+b;}
各位大哥大姐,
可否帮我看看!不胜感激!


解决方案1:

实际上函数fl是个户提供的一个函数指针,它只在客户进程有效,服务器的回调应在客户进程执行,用wangweixing2000(星)的方法就可以了,但是wangweixing2000(星)不是动态的函数指针调用,你可以在他的基础上加一个参数,但不要用函数指针,用一个DWORD或long,调用时把函数指针强制转换一下。
简单写一下:
idl:
[...]interface ICallBack : IUnKnown {
HRESULT fClntCB([in]DWORD fcb, [in]int a, [in]int b);
};
server:
HRESULT f(IUnknown* pUnk, DWORD fcb, int a, int b) {
if (pUnk) return E_POINTER;
ICallBack* pCB = NULL;
pUnk->QueryInterface(IID_ICallBack, (void**)&pCB);
if (pCB) return E_NOINTERFACE;
pCB->fClntCB(fcb, a, b);
...
pCB->Release();
return S_OK;
}
client:
long (fl)(int a, int b);
HRESULT fClntCB(DWORD fcb, int a, int b) {
fl* ftmp = reinterpret_cast<fl*>fcb;
long rt = ftmp(a, b);
...
}
long f1(int a, int b) {return a+b};
long f2(int a, int b) {return a*b};
fClntCB(pIXxx, (DWORD)(&f1), 123, 456);
fClntCB(pIXxx, (DWORD)(&f2), 123, 456);

解决方案2:

连接点可以实现:
eg:
com中一个事件:LONG f([in]long x,[in]long y);
在你想要激发的地方:  long s = fire_f(x,y);
在客户:
接受事件:
LONG APP::f(long x,long y)
{
    return f1(x,y);//f1为你客户端一个函数
}
很简单,因为你只是想要结果而不管内部怎么计算,哈哈


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 作为Client调用DCOM接口时,总是弹出"ServerBusy"的对话框,我想把它去掉,该怎么处理?
  • DCOM组件的接口函数的参数中可以传递一个文件吗?
  • 如何在DCOM的接口中传递IHTMLDocument型指针?
  • 请教高手:如何调用DCOM接口方法
  • DCOM中接口函数的参数是否可以传递函数呢(高手救命呀!!!!!)
  • 为什么我的dcom总是找不到接口?
  • 100分求解DCOM接口调用问题,用过DCOM的请进!

相关文章

  • 2017-06-04 如和在只知道一个activex的clsid的情况下查看它的所有属性,方法?用什么工具?
  • 2017-06-05 我的程序里我只建立了一个线程,用按扭来改变一个全局变量来终止线程,会产生同步问题吗?
  • 2017-06-05 多个线程能同时访问同一个全局对象的方法吗?
  • 2017-06-04 高分求教!!!急!!!!在线等
  • 2017-06-04 CoCreateInstance出错,怎么回事
  • 2017-06-05 请教在WIN2000/NT/XP下利用屏幕取词技术修改其它进程中TREEVIEW的问题有源码
  • 2017-06-04 想写一个包函Office文件的ActiveX,使用Ole,应该准备那些东西
  • 2017-06-05 为何创建线程会返回空,而线程已经存在?高手进
  • 2017-06-05 如何用javascript调用dll的时候,但是不弹出签名的对话框?
  • 2017-06-05 A调用B的函数删除自己,返回出错怎么办?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在铺线程中调用主线程中的控件,最好的方法是什么?
    • 求助:如何用ActiveX控件启动系统本地的exe文件
    • 有关ImageOledll的问题哈
    • 看看!怎样关闭全屏幕的程序,一个ps游戏的模拟器,万分着急!!!!分数不限制,要多少给多少!!!!!!
    • 只有DLL和LIB能知道里面的函数吗?
    • 如何将已有的程序封装为activeX控件
    • 高手帮帮我吧。
    • 请问如果dll出现内存泄漏,程序算不算有问题
    • CSocket在一个线程中阻塞,如何关闭呢?
    • 如何从工程中干净的删除一基于MFC的类?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有