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

隨筆-80  評論-22  文章-0  trackbacks-0
前一陣在工作中做項(xiàng)目的時(shí)候,遇到了COM組件的調(diào)用和使用問題,當(dāng)時(shí)研究和好一陣,才把中間的環(huán)節(jié)打通,現(xiàn)在寫出來為大家提供方便,這里包含了四個(gè)類型:

  1、在VS2005中,C#編寫DLL并使用C++調(diào)用

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

  3、在VC6.0中編寫COM組件,使用VS2005 C#調(diào)用

  4、在VC6.0中編寫COM組件,使用VC6.0調(diào)用

  其中每個(gè)類型都寫了兩個(gè)程序,一個(gè)為COM組件程序,一個(gè)為調(diào)用程序

  程序?qū)崿F(xiàn):

  1、在VS2005中,C#編寫DLL并使用C++調(diào)用

  (1)C#編寫DLL程序

  建立C#編寫的DLL程序AddDll,項(xiàng)目類型為:類庫

  程序代碼:

 

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++編寫調(diào)用程序

  建立C++的Win32控制臺(tái)應(yīng)用程序UseDll,項(xiàng)目類型為:Win32控制臺(tái)應(yīng)用程序

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

C++和C#編寫調(diào)用COM組件

  圖一 公共語言運(yùn)行庫設(shè)置

  程序代碼:

#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調(diào)用

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

  建立C#編寫的COM組件,項(xiàng)目類型為類庫

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

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

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

C++和C#編寫調(diào)用COM組件

  圖二 COM生成設(shè)置

  程序代碼:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace AddCom
{
  
//可以通過//菜單的 “工具/guid生成”。
  
//注意要選擇Define Guid{….}格式,并全//部保存下來,保存到哪都行,記事本呀什么的。
  
//因?yàn)樵谧鯲C程序/////////的時(shí)候要用到的。
  [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編寫調(diào)用程序

  使用VC6.0編寫建立MFC應(yīng)用程序UseCom,項(xiàng)目類型為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,
"計(jì)算結(jié)果",MB_OK);
    CoUninitialize(); 
    
}


3、在VC6.0中編寫COM組件,使用VS2005 C#調(diào)用

  (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);
    }
;

實(shí)現(xiàn):

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#編寫調(diào)用程序(網(wǎng)站程序)

  使用VS2005建立網(wǎng)站UseCom

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

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

C++和C#編寫調(diào)用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調(diào)用

  (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);
    }
;

  實(shí)現(xiàn):

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編寫調(diào)用程序

  使用VC6.0建立MFC應(yīng)用程序UseCOM,調(diào)用剛剛建立的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(
"返回結(jié)果:%d; %f; %d",d_c,f_c,d_d);
    MessageBox(strResult,
"結(jié)果",MB_OK);
    m_add.Release();
    m_add 
= NULL;
    CoUninitialize(); 
    
}

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

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            在线亚洲欧美| 午夜精品久久久久久久男人的天堂 | 欧美高清不卡| 亚洲一区二区高清视频| 麻豆成人综合网| 国产欧美日韩激情| 一本大道久久a久久综合婷婷| 蜜桃av一区二区| 欧美伊人久久久久久久久影院| 欧美日韩免费网站| 日韩视频二区| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美 日韩 国产一区二区在线视频 | 99国产精品久久| 欧美国产日韩视频| 亚洲欧美激情四射在线日| 亚洲午夜精品视频| 欧美色图首页| 亚洲欧美日韩久久精品 | 欧美成va人片在线观看| 亚洲日本中文字幕| 亚洲国产精品成人va在线观看| 久久青青草原一区二区| 一区三区视频| 亚洲国产成人久久综合| 欧美国产日本| 亚洲视频www| 中国女人久久久| 国产精品一区二区久久久| 香蕉成人久久| 久久久精品一品道一区| 久久天天躁夜夜躁狠狠躁2022| 影院欧美亚洲| 亚洲电影第1页| 欧美区国产区| 性久久久久久| 久久久91精品国产| 亚洲精品在线二区| 在线亚洲精品| 国产一区二区三区四区hd| 久久综合一区二区三区| 欧美激情第9页| 亚洲欧美日韩成人高清在线一区| 亚洲欧美在线磁力| 亚洲国内高清视频| 亚洲天堂网在线观看| 国产一区二区三区成人欧美日韩在线观看| 久久久综合网站| 欧美福利专区| 欧美一区二粉嫩精品国产一线天| 久久久精品国产一区二区三区| 日韩视频三区| 午夜精品福利电影| 最新精品在线| 亚洲欧美日韩成人高清在线一区| 在线成人h网| 一区二区三区四区五区在线| 国产真实乱偷精品视频免| 91久久精品www人人做人人爽| 国产精品免费在线| 欧美激情bt| 国产无一区二区| 亚洲精选视频在线| 黄色成人在线网站| 在线亚洲自拍| 亚洲精品网站在线播放gif| 亚洲一区二区三区高清| 亚洲日本欧美在线| 久久久久久久激情视频| 亚洲中午字幕| 欧美成年人视频网站| 欧美在线1区| 欧美电影在线免费观看网站| 欧美有码在线视频| 欧美性一二三区| 亚洲第一精品夜夜躁人人躁| 国产欧美一区二区三区视频| 亚洲国产1区| 久久精品中文字幕免费mv| 欧美日本一区二区高清播放视频| 久久久久**毛片大全| 欧美日韩中字| 亚洲精品国产日韩| 亚洲激情黄色| 久久久高清一区二区三区| 午夜欧美理论片| 欧美午夜片欧美片在线观看| 欧美高清在线视频观看不卡| 国产一区二区黄| 亚洲欧美日韩国产精品| 亚洲性图久久| 欧美日韩福利| 亚洲黄色精品| 亚洲激情中文1区| 久久久www成人免费无遮挡大片| 性8sex亚洲区入口| 国产精品一区2区| 亚洲午夜日本在线观看| 亚洲最新视频在线| 欧美精品粉嫩高潮一区二区 | 午夜精品视频在线观看一区二区| 欧美精品免费在线| 91久久视频| 日韩视频免费| 欧美视频免费在线| 99国产精品99久久久久久| 一区二区三区久久精品| 欧美日韩综合| 亚洲图片你懂的| 亚洲欧美在线高清| 国产美女精品一区二区三区| 欧美一区二区免费视频| 久久久久久尹人网香蕉| 黄色成人在线| 欧美黄色一级视频| 日韩手机在线导航| 亚洲欧美成人综合| 国产在线视频不卡二| 欧美成人国产| 9色porny自拍视频一区二区| 午夜在线成人av| 有码中文亚洲精品| 欧美精品在线视频| 亚洲一区二区在线播放| 久久久久久**毛片大全| 一区二区亚洲精品国产| 欧美a级片网站| 99这里只有精品| 欧美在线视频观看免费网站| 激情综合电影网| 欧美激情一区在线| 午夜精品久久久久久 | 欧美人与禽猛交乱配| 亚洲午夜一级| 蜜桃久久av| 一区二区日韩| 国产日韩在线播放| 蜜桃精品一区二区三区 | 欧美激情第二页| 午夜久久福利| 亚洲国产黄色| 欧美专区在线播放| 亚洲综合电影一区二区三区| 91久久香蕉国产日韩欧美9色| 欧美日韩国产免费观看| 欧美影院久久久| 亚洲三级视频| 久久久精品欧美丰满| 一区二区三区日韩精品| 怡红院精品视频| 国产精品女主播在线观看| 蘑菇福利视频一区播放| 亚洲欧美国产77777| 日韩视频免费观看高清在线视频| 久久综合伊人| 欧美一区二区三区在线观看| 亚洲欧洲美洲综合色网| 国内精品久久久久久久影视麻豆| 欧美午夜精品理论片a级大开眼界| 免费观看一区| 久久久91精品国产一区二区三区| 亚洲伊人色欲综合网| 91久久久亚洲精品| 亚洲第一黄色| 免费成人av| 久久夜色撩人精品| 久久久噜噜噜久久| 久久国产欧美| 欧美在线观看一区二区三区| 亚洲一区视频在线| 亚洲天堂av在线免费| 日韩视频免费在线观看| 亚洲乱码国产乱码精品精可以看| 尹人成人综合网| 在线成人中文字幕| 亚洲第一福利社区| 亚洲电影观看| 亚洲欧洲一区二区三区在线观看| 亚洲国产va精品久久久不卡综合| 黄色成人在线网址| 精品96久久久久久中文字幕无| 国产资源精品在线观看| 国产一区二区三区直播精品电影 | 模特精品在线| 欧美xx69| 欧美成人中文| 欧美国产日韩二区| 亚洲高清不卡av| 最近中文字幕mv在线一区二区三区四区 | 国产精品一区久久久| 欧美激情第9页| 亚洲欧洲在线一区| 亚洲激情啪啪| 亚洲激情视频在线播放| 亚洲电影观看| 午夜日韩激情| 91久久视频| 日韩午夜精品视频| 99视频+国产日韩欧美| 日韩午夜免费|