荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: DuMiYue (TH@Figo), 信区: Visual
标  题: 在VC6.0下如何调用Delphi5.0开发的进程内COM
发信站: 荔园晨风BBS站 (Tue Mar 19 15:03:56 2002), 转信

在VC6.0下如何调用Delphi5.0开发的进程内COM
作者:xacn
源程序下载:VC调用Delphi的COM组件     Delphi调用VC的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和一个空的接口文件,这样编译就生成了tt
t.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中定义

 //申明接口返回和接口类型
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.dl
l /u就行了。
    好了。现在编译macpp并运行就可以进行接口的调用了。这就是简单的在VC6.0下对
Delphi5.0编写的COM进行的接口调用。反过来也可以在VC6.0下开发COM,在Delphi5.0下
进行调用。本文所附带的代码中给出了示范。
谢谢大家能抽时间读,我将努力学好国文。至少在以后的文章中会少出现几个错别字。



--
他能够不知不觉令到我倾心
    也能够一句说话而留下痛恨
        感情最光辉一刹热暖我一生
            爱人远走了以后仍然是爱人

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 218.30.30.9]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店