在VC6.0下如何调用Delphi5.0开发的进程内COM
因为本人的语言水平很差,考大学时150的总分,我考了个60分。外语也是,初中及格过一次,会考及格过一次。其它的时间好像从没有及格过。所以我不写文章,因我一百字的文章给我写,至少要出八九个错别字。哈哈….真是个马大哈。你别说我还真的姓马。所以下面的文章中有错误之处,请你老人家多多理解。谁叫你看我的文章了的。下面就谈正事吧!
本人接触COM的时间也不长,是看了本关于组件重用的书,才让我对COM产生性(兴)趣的。所以就想试试COM的二进制级重用好不好用。在开发公司项目的过程中,我就用COM方式写了一个数据库的操作。(用Delphi写的)。本想这项目到此完了。可是过了不久,老板叫写另一个小程序,我细致的分析了功能要求。哈哈,原来和我用COM开发的一个项目的数据操作部分一样。所以就想到重用。可是现在所要写的程序是在VC源程序基础上加入数据库操作。所以,怎样才能把用Delphi写好的COM用到VC上呀!经过查找资料,终于找到了,原来只要把Delphi写的COM所生成的IDL文件用MIDL.EXE编译生成.h和_i.c文件。这样VC就可以用了。可是这个MIDL.EXE文件真是不好用,到现在我还是不会用。我只有先在VC下生成一个ATL的工程文件ttt和一个空的接口文件,这样编译就生成了ttt.h,ttt.idl,ttt_i.c。哈哈….没办法,谁叫我不会用Midl.exe呀,只有作这个笨办法了。我把在Delphi下生成的rh.idl文件拷贝到ttt下并改名为ttt.idl编译。生成的ttt.h、ttt_i.c就是我要的了。这样就生成了想要的VC能调用的两个接口文件。下面是事例:
1、用Delphi5.0生成进程内的COM服务程序:
Delphi5.0编写进程内的COM服务程序我就不再这里多说.我在“文章事例"目录下生成的"madll.dpr", 就是一个用Delphi编写的COM程序,编译生成madll.idl和madll.dll文件。
2、用VC6.0调用COM服务接口:
把用Delphi5.0生成的madll.idl文件编译成.h和_i.c?的文件.如果不会用Midl.exe的。可用我上面所讲的方法进行。
生成macpp工程,是个对话框的。在系统中加入所生成的madll.h文件。这样你就可以在ClassView中看到ImaCom接口申明了。
在madlg.cpp中定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//申明接口返回和接口类型 HRESULT hr; ImaCom *pmaCom = NULL; 在OnButton1中调用 void CMacppDlg::OnButton1() { // TODO: Add your control notification handler code here // 初始化COM hr = CoInitialize(0); // 使用SUCCEEDED 宏并检查我们是否能得到一个接口指针 if (SUCCEEDED(hr)) { hr = CoCreateInstance( CLSID_maCom, NULL, CLSCTX_INPROC_SERVER, IID_ImaCom, ( void **) &pmaCom); //生成接口调用类场 pmaCom->ShowMa(NULL,( WORD )GetSafeHwnd()); //调用COM方法。 pmaCom->Release(); CoUninitialize(); } } |
在运行此程序前必需先对madll.dll进行注册,否则调用会不成功。
注册只要在“开始”-“运行”对话框中输入:regsvr32 madll.dll。确定就行。当然在regsvr32 后要跟的是madll.dll所在的目录。要注销时是这样 regsvr32 madll.dll /u就行了。
好了。现在编译macpp并运行就可以进行接口的调用了。这就是简单的在VC6.0下对Delphi5.0编写的COM进行的接口调用。反过来也可以在VC6.0下开发COM,在Delphi5.0下进行调用。本文所附带的代码中给出了示范。
谢谢大家能抽时间读,我将努力学好国文。至少在以后的文章中会少出现几个错别字。
http://www.vckbase.com/module/articleContent.php?id=135
在VC6.0下如何调用Delphi5.0开发的进程内COM的更多相关文章
- CDH6.3.0下Apache Atlas2.1.0安装与配置
CDH6.3.0下Apache Atlas2.1.0安装与配置 0. 说明 文中的${ATLAS_HOME}, ${HIVE_HOME} 环境变更需要根据实际环境进行替换. 1. 依赖 A. 软件依赖 ...
- MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程
新建web project: 命名为SSH,做如下设置: 新建后的工程目录如下: 然后开始添加SSH框架,这里我按照struts-spring-hibernate顺序进行添加. 首先添加struts2 ...
- VC6.0下string不能用pusk_back,可用+=代替
2013-09-11 21:14:32 在VS下运行正确的代码,拿到VC6.0下,编译出错,提示: error C2039: 'push_back' : is not a member of 'bas ...
- 如何在VC6.0下用pthread.h这个头文件
如何在VC6.0下用pthread.h这个头文件 1.下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可) http://so ...
- c# .netframwork 4.0 调用 2.0时报错 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
“System.IO.FileLoadException”类型的未经处理的异常在 XXX.dll 中发生 其他信息: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的 ...
- # 2017-2018-2 20155228 《信息安全系统设计原理》 使用VirtualStudio2008创建和调用静态库和使用VirtualC++6.0创建和调用动态库
使用virtual c++ 6.0创建和调用动态库 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一 ...
- Win7 64下Visual C++ 6.0不兼容
Win7 64下Visual C++ 6.0不兼容 安装VSE6.0: 1.运行setup.exe安装程序,会弹出如下的的 程序兼容性助手 提示框,这个是Win7在警告用户vc6存在兼容性问题:此程序 ...
- Debian8.3.0下安装Odoo8.0步骤
Debian8.3.0下安装Odoo8.0的方法 假设你已经安装好了Debian 系统,使用root帐号执行如下命令 # apt-get update && apt-get upgra ...
- 与众不同 windows phone (48) - 8.0 其它: C# 调用 C++
[源码下载] 与众不同 windows phone (48) - 8.0 其它: C# 调用 C++ 作者:webabcd 介绍与众不同 windows phone 8.0 之 其它 C# 中调用 W ...
随机推荐
- Android 修改toast的默认位置和获取当前屏幕的高度和宽度
Toast toast; toast=Toast.makeText(this, "toast", Toast.LENGTH_LONG); toast.setGravity(grav ...
- 各种类型Android源代码
商城类APPhttp://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=673&extra=page%3D1 电影影院 ...
- HTTP缓存缓存机制
http协议无状态,所以缓存设定从两方面考虑.客户端浏览器和服务器端. 浏览器端实现过期机制. 服务器端实现验证机制. 缓存机制. 为了减轻服务器负担,也减少网络传输数量.http1.0定义了Expi ...
- #CI的MVC实现
CI的MVC实现 CI被标榜为一款简单易用的框架,经过一段时间的了解后,它的小而精给让我印象深刻.麻雀虽小五脏俱全,一个框架产品包含太多的特性,这篇文章就说说CI中是如何实现MVC的? 执行流程 根据 ...
- div模拟textarea以实现高度自适应实例页面
作为多行文本域功能来讲,textarea满足了我们大部分的需求.然而,textarea有一个不足就是不能像普通div标签一样高度可以跟随内容自适应.textarea总是很自信地显摆它的滚动条,高度固执 ...
- jchat:linux聊天程序4:客户端
makefile: jchat: main.o login.o regist.o tcp.o gcc -w main.o login.o regist.o tcp.o -o jchat rm -f * ...
- 编译gcc4.4.6与ICE遇到的几个问题
1.遇错./.libs/libgcj.so: undefined reference to `__cxa_call_unexpected' 解决:d.错误码:"/.libs/libgcj.s ...
- 超轻量级高性能ORM数据访问组件Deft,比dapper快20%以上
超轻量级高性能ORM数据访问组件Deft,比dapper快20%以上 阅读目录 Deft简介 Deft 核心类介绍 Deft 3分钟即可上手使用 其他可选的配置参数 性能测试 Demo代码下载 回到顶 ...
- Delphi使用Windows API函数AnimateWindow实现窗体特效
{**********************************************************************API函数 AnimateWindow 使用:函数功能:窗 ...
- Activitys, Threads, & Memory Leaks
Activitys, Threads, & Memory Leaks 在Android编程中,一个公认的难题是在Activity的生命周期如何协调长期运行的任务和避免有可能出现的内存泄漏问题. ...