程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 在VC 6.0下如何調用Delphi開發的進程內COM

在VC 6.0下如何調用Delphi開發的進程內COM

編輯:關於VC++

源代碼包中共有兩個zip文件,其中DelphiCallVCCOM.zip為Delphi調用VC的COM組件,VCCallDelphiCOM.zip為VC調用Delphi的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中定義

//申明接口返回和接口類型
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下進行調用。本文所附帶的代碼中給出了示范。

謝謝大家能抽時間讀,我將努力學好國文。至少在以後的文章中會少出現幾個錯別字。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved