青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-80  評論-22  文章-0  trackbacks-0
前一陣在工作中做項目的時候,遇到了COM組件的調用和使用問題,當時研究和好一陣,才把中間的環節打通,現在寫出來為大家提供方便,這里包含了四個類型:

  1、在VS2005中,C#編寫DLL并使用C++調用

  2、在VS2005中C#編寫的COM組件,使用VC6.0調用

  3、在VC6.0中編寫COM組件,使用VS2005 C#調用

  4、在VC6.0中編寫COM組件,使用VC6.0調用

  其中每個類型都寫了兩個程序,一個為COM組件程序,一個為調用程序

  程序實現:

  1、在VS2005中,C#編寫DLL并使用C++調用

  (1)C#編寫DLL程序

  建立C#編寫的DLL程序AddDll,項目類型為:類庫

  程序代碼:

 

using System;
using System.Collections.Generic;
using System.Text;
namespace AddDll
{
  
public class Add
  
{
    
public int iadd(int a, int b)
    
{
      
int c = a + b;
      
return c;
    }

  }

}

 

  (2)C++編寫調用程序

  建立C++的Win32控制臺應用程序UseDll,項目類型為:Win32控制臺應用程序

  配置:右鍵點擊解決方案資源管理器中的UseDll,選擇“屬性”,將公共語言運行庫支持設置為“公共語言運行庫支持(/clr)”

C++和C#編寫調用COM組件

  圖一 公共語言運行庫設置

  程序代碼:

#include "stdafx.h"
#include 
"stdio.h"
#
using "..debugAddDll.dll"
using namespace AddDll;
int _tmain(int argc, _TCHAR* argv[])
{
    
int result;
    Add 
^add = gcnew Add();
    result 
= add->iadd(10,90);
    printf(
"%d",result);
    scanf(
"%s");
    
return 0;
}


2、在VS2005中C#編寫的COM組件,使用VC6.0調用

  (1)VS2005中使用C#編寫COM組件

  建立C#編寫的COM組件,項目類型為類庫

  配置:右鍵點擊解決方案資源管理器中的AddCom,選擇“屬性”,選擇“生成”,選擇“為COM Interop注冊(_P)”

  打開AssemblyInfo.cs文件,設置[assembly: ComVisible(true)]

  這用就可以生成AddCom.tlb文件

C++和C#編寫調用COM組件

  圖二 COM生成設置

  程序代碼:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace AddCom
{
  
//可以通過//菜單的 “工具/guid生成”。
  
//注意要選擇Define Guid{….}格式,并全//部保存下來,保存到哪都行,記事本呀什么的。
  
//因為在做VC程序/////////的時候要用到的。
  [Guid("298D881C-E2A3-4638-B872-73EADE25511C")] 
  
public interface AddComInterface
  
{
    [DispId(
1)]
    
int iadd(int a, int b);
    [DispId(
2)]
    
float ladd(float a, float b);
  }

  [Guid(
"2C5B7580-4038-4d90-BABD-8B83FCE5A467")]
  [ClassInterface(ClassInterfaceType.None)]
  
public class AddComService : AddComInterface
  
{
    
public AddComService()
    
{
    }

    
public int iadd(int a, int b)
    
{
      
int c = 0;
      c 
= a + b;
      
return c;
    }

    
public float ladd(float a, float b)
    
{
      
float c = 0;
      c 
= a + b;
      
return c;
    }

  }

}


(2)VC6.0編寫調用程序

  使用VC6.0編寫建立MFC應用程序UseCom,項目類型為MFC AppWizard(exe)

  在stdafx.h添加:

#import "AddCom.tlb"
using namespace AddCom;

程序代碼:

void CUseComDlg::OnButtonUse()
{
    
// TODO: Add your control notification handler code here
    int dresult;
    
float fresult;
    CString strResult;
    CoInitialize(NULL);
//NULL換成0也可以
    AddCom::AddComInterfacePtr p_Add(__uuidof(AddComService));
    dresult 
= p_Add->iadd(1,2);
    fresult 
= p_Add->fadd(1.2,2.3);
    strResult.Format(
"int:%d nfloat:%f",dresult,fresult);
    MessageBox(strResult,
"計算結果",MB_OK);
    CoUninitialize(); 
    
}


3、在VC6.0中編寫COM組件,使用VS2005 C#調用

  (1)VC6.0編寫COM

  使用VC6.0建立COM組件,工程類型:ATL COM AppWizard

  程序代碼:

  接口:

interface IAdd : IDispatch
    
{
        [id(
1), helpstring("method iadd")] HRESULT iadd([in]int a, [in]int b, [out]int * c);
        [id(
2), helpstring("method fadd")] HRESULT fadd([in]float a, [in]float b, [out]float * c);
        [id(
3), helpstring("method isub")] HRESULT isub([in]int a, [in]int b, [out]int * c);
    }
;

實現:

STDMETHODIMP CAdd::iadd(int a, int b, int *c)
{
    
// TODO: Add your implementation code here
    *= a + b;
    
return S_OK;
}

STDMETHODIMP CAdd::fadd(
float a, float b, float *c)
{
    
// TODO: Add your implementation code here
    *= a + b;
    
return S_OK;
}

STDMETHODIMP CAdd::isub(
int a, int b, int *c)
{
    
// TODO: Add your implementation code here
    *= a - b;
    
return S_OK;
}


(2)VS2005使用C#編寫調用程序(網站程序)

  使用VS2005建立網站UseCom

  配置:在解決方案資源管理器中的主目錄點擊右鍵,選擇添加引用,選擇COM,添加剛剛建立的AddCom 1.0 Type Library

  在程序中要using編寫的COM組件:using ADDCOMLib;

C++和C#編寫調用COM組件

  圖三 引用COM

  程序代碼:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using ADDCOMLib;
public partial class _Default : System.Web.UI.Page
{
  
protected void Page_Load(object sender, EventArgs e)
  
{
  }

  
protected void ButtonCom_Click(object sender, EventArgs e)
  
{
    Add add 
= new Add();
    
int iresult;
    
float fresult;
    
int sresult;
    add.IAdd(
1020out iresult);
    add.fadd((
float)1.2,(float)2.3out fresult);
    add.isub(
10010out sresult);
    TextBoxResult.Text 
= iresult.ToString();
    TextBoxRe2.Text 
= fresult.ToString();
    TextBoxRe3.Text 
= sresult.ToString();
  }

}


4、在VC6.0中編寫COM組件,使用VC6.0調用

  (1)VC6.0編寫COM組件

  使用VC6.0建立COM組件,工程類型:ATL COM AppWizard

  程序代碼:

  接口:

interface IAdd : IDispatch
    
{
        [id(
1), helpstring("method iadd")] HRESULT iadd([in]int a, [in]int b, [out]int * c);
        [id(
2), helpstring("method fadd")] HRESULT fadd([in]float a, [in]float b, [out]float * c);
        [id(
3), helpstring("method isub")] HRESULT isub([in]int a, [in]int b, [out]int * c);
    }
;

  實現:

STDMETHODIMP CAdd::iadd(int a, int b, int *c)
{
    
// TODO: Add your implementation code here
    *= a + b;
    
return S_OK;
}

STDMETHODIMP CAdd::fadd(
float a, float b, float *c)
{
    
// TODO: Add your implementation code here
    *= a + b;
    
return S_OK;
}

STDMETHODIMP CAdd::isub(
int a, int b, int *c)
{
    
// TODO: Add your implementation code here
    *= a - b;
    
return S_OK;
}



(2)VC6.0編寫調用程序

  使用VC6.0建立MFC應用程序UseCOM,調用剛剛建立的COM組件

  將上面程序AddCom生成的AddCom.dll放入本程序的工程目錄和程序生成目錄中

  在StdAfx.h中加入:

  #import "AddCom.dll" no_namespace

  程序代碼:

void CUseComDlg::OnBUTTONUse()
{
    
// TODO: Add your control notification handler code here
    CString strResult;
    CoInitialize(NULL);
//NULL換成0也可以
    IAddPtr m_add = NULL;
    HRESULT hr 
= S_OK;
    hr 
= m_add.CreateInstance(__uuidof(Add));
    
int d_a = 90;
    
int d_b = 10;
    
int d_c;
    
int d_d;
    
float f_a = 1;
    
float f_b = 2;
    
float f_c;
    m_add
->_IAdd(d_a,d_b,&d_c);
    m_add
->fadd(f_a,f_b,&f_c);
    m_add
->isub(d_a,d_b,&d_d);
    strResult.Format(
"返回結果:%d; %f; %d",d_c,f_c,d_d);
    MessageBox(strResult,
"結果",MB_OK);
    m_add.Release();
    m_add 
= NULL;
    CoUninitialize(); 
    
}

posted on 2009-07-20 12:55 Bluesea 閱讀(694) 評論(0)  編輯 收藏 引用 所屬分類: COM

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            老司机一区二区| 久久精品一区二区三区不卡牛牛 | 欧美激情1区2区| 女同性一区二区三区人了人一| 久久久久久久综合日本| 久久精品一区二区三区四区| 久久精品九九| 女生裸体视频一区二区三区| 亚洲国产91色在线| 亚洲激情第一页| 99精品欧美| 亚洲欧美日韩中文视频| 久久精品国产一区二区三区| 欧美成人在线影院| 国产精品高潮呻吟久久av黑人| 国产日韩欧美91| 亚洲国产美女| 午夜国产欧美理论在线播放| 久久综合影音| 在线亚洲观看| 美腿丝袜亚洲色图| 国产精品丝袜白浆摸在线| 国产一区二区欧美日韩| 亚洲精品影视| 久久久午夜视频| 99国产精品| 亚洲尤物精选| 久久嫩草精品久久久久| 欧美国产综合一区二区| 亚洲视频在线观看网站| 麻豆成人91精品二区三区| 欧美三级小说| 亚洲国产一区视频| 欧美在线www| 亚洲精品中文字幕有码专区| 午夜精品国产更新| 欧美日韩一区二| 亚洲福利av| 久久久美女艺术照精彩视频福利播放| 亚洲黄色av一区| 久久久精品国产免大香伊| 国产精品久久久久9999吃药| 亚洲精品免费观看| 蜜桃精品久久久久久久免费影院| 亚洲欧洲精品一区二区三区波多野1战4 | 玖玖玖国产精品| 亚洲私拍自拍| 欧美经典一区二区三区| 国产一在线精品一区在线观看| 一本不卡影院| 91久久久久久久久| 久久精品亚洲国产奇米99| 国产精品人人做人人爽| 一区二区三区免费观看| 欧美成人午夜视频| 久久理论片午夜琪琪电影网| 国产一区二区主播在线 | 久久综合久色欧美综合狠狠| 中文在线一区| 欧美精品久久久久久久免费观看 | 亚洲国产欧美另类丝袜| 免费一区视频| 久久亚洲二区| 亚洲欧洲日本国产| 亚洲国产精品999| 欧美成人精品h版在线观看| 黄色工厂这里只有精品| 久久久欧美精品sm网站| 欧美在线视频全部完| 国产一区二区中文| 另类尿喷潮videofree| 久久精品国产亚洲一区二区三区| 一区二区三区在线不卡| 美女主播一区| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲黄色免费| 99视频精品全部免费在线| 欧美日韩中文字幕日韩欧美| 国产精品另类一区| 午夜影院日韩| 久久精品国产亚洲精品| 亚洲第一黄色| 91久久精品www人人做人人爽| 欧美激情小视频| 亚洲欧美激情一区二区| 久久国产88| 亚洲精品欧美极品| 一区二区三区精品视频| 国产一区二区三区的电影| 欧美大片在线观看| 欧美日韩另类字幕中文| 久久精品动漫| 欧美国产一区视频在线观看| 亚洲午夜精品网| 久久不射中文字幕| 日韩视频免费看| 亚洲欧美视频在线| 最新亚洲电影| 欧美一级大片在线免费观看| 亚洲精品美女在线观看| 亚洲欧美激情在线视频| 亚洲精品黄色| 久久成人av少妇免费| 一区二区三区视频在线播放| 久久riav二区三区| 亚洲视频中文字幕| 久久男人资源视频| 午夜精品理论片| 欧美高清视频一区二区三区在线观看 | 午夜亚洲性色视频| 嫩模写真一区二区三区三州| 性做久久久久久久免费看| 女生裸体视频一区二区三区| 性久久久久久| 欧美日韩在线亚洲一区蜜芽| 欧美成人综合一区| 国产精品专区一| 一区二区三区欧美在线| 亚洲黄页视频免费观看| 欧美一区在线看| 午夜免费久久久久| 欧美日韩一区国产| 91久久久久久久久久久久久| 伊大人香蕉综合8在线视| 亚洲综合视频一区| 亚洲在线视频网站| 欧美日韩免费高清| 亚洲精品欧洲| 一区二区三区日韩欧美精品| 欧美大片91| 亚洲高清123| 亚洲精品123区| 毛片av中文字幕一区二区| 久久久无码精品亚洲日韩按摩| 国产精品蜜臀在线观看| 亚洲视频观看| 香蕉久久夜色精品国产使用方法| 国产精品xnxxcom| 99视频精品全国免费| 亚洲一区二区三区欧美| 欧美日韩综合视频| 欧美一级视频免费在线观看| 欧美视频观看一区| 亚洲视频在线观看三级| 欧美一进一出视频| 国产精品尤物福利片在线观看| 亚洲午夜激情免费视频| 欧美一级片一区| 国产日韩欧美不卡在线| 久久av红桃一区二区小说| 久久天天躁夜夜躁狠狠躁2022 | 亚洲一区二区不卡免费| 国产精品免费视频观看| 亚洲女同同性videoxma| 久久狠狠亚洲综合| 国内外成人免费视频| 裸体一区二区| aa国产精品| 久久五月婷婷丁香社区| 黄色精品一区| 欧美激情亚洲综合一区| 夜夜嗨av一区二区三区四季av| 亚洲综合色在线| 韩日精品视频一区| 欧美成人乱码一区二区三区| 一本色道久久综合狠狠躁篇的优点 | 欧美麻豆久久久久久中文| 一本久久综合亚洲鲁鲁| 久久成人人人人精品欧| 亚洲成人在线网站| 欧美丝袜第一区| 欧美一区深夜视频| 亚洲国产婷婷香蕉久久久久久99| 一区二区欧美激情| 国产丝袜美腿一区二区三区| 久久久亚洲精品一区二区三区| 亚洲日本激情| 欧美一区二区视频观看视频| 亚洲国产精品成人综合| 国产精品vvv| 美国三级日本三级久久99| 一区二区三区成人精品| 久久不射电影网| 日韩一级不卡| 激情欧美一区二区三区| 欧美日韩视频在线第一区| 久久久久久久一区二区三区| 亚洲美女视频在线观看| 另类图片综合电影| 亚洲视频1区| 亚洲电影在线| 国产亚洲毛片在线| 欧美日韩一二三四五区| 鲁大师成人一区二区三区| 亚洲综合激情| 夜夜嗨一区二区| 亚洲精品少妇30p| 蜜月aⅴ免费一区二区三区 | 国产精品嫩草99a| 欧美激情女人20p|