²é¿´: 842  |  »Ø¸´: 1

¶¹×ӵ͹

гæ (³õÈëÎÄ̳)

[½»Á÷] ¡¾ÇóÖú¡¿ÄÄλ¸ßÈË»áÓã֣㬣֣ã«£«µ÷Óãã£ï£í×é¼þµÄ ÒÑÓÐ1È˲ÎÓë

Çó¸ßÈË£¬Íò·Ö¸Ðл
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

absoluty

½ð³æ (ÕýʽдÊÖ)

¡ï ¡ï ¡ï ¡ï ¡ï ¡ï
Сľ³æ(½ð±Ò+0.5):¸ø¸öºì°ü£¬Ð»Ð»»ØÌû½»Á÷
ÎÞÄεÄÔÆ(½ð±Ò+5):ºÜÏêϸ£¡×¨¼ÒÐÁ¿àÁË~ 2010-06-09 09:02:35
C++ºÍC#±àдµ÷ÓÃCOM×é¼þ


×÷ÕߣºÐìÁ賬

ÏÂÔØÔ´´úÂë


ÕªÒª£ºÏÖÔÚCOM×é¼þµÄʹÓÃÔ½À´Ô½¹ã·º£¬ÔÚ¸÷¸ö³ÌÐòÖе÷ÓÃCOM×é¼þÎÒÏë´ó¼Ò¶¼Óöµ½¹ý£¬ÕâÆªÎÄÕ¾ÍÊǹØÓÚCOM×é¼þµÄ±àдºÍµ÷Óõģ¬Ö÷Òª°üº¬ÁËʹÓÃVC6.0±àдºÍµ÷ÓÃCOM×é¼þ£¬VS2005ÖÐʹÓÃC#±àдºÍµ÷ÓÃCOM×é¼þ£¬ÒÔ¼°ÔÚVC6.0ºÍVS2005Ö®¼ä»¥Ïàµ÷ÓÃCOM×é¼þ¡£

¹Ø¼ü×Ö£ºVC6.0±àдµ÷ÓÃCOM VS2005ÖÐC#±àдºÍµ÷ÓÃCOM VC6.0ºÍVS2005Ö®¼ä»¥Ïàµ÷ÓÃCOM

ÕýÎÄ£º

ǰһÕóÔÚ¹¤×÷ÖÐ×öÏîÄ¿µÄʱºò£¬Óöµ½ÁË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)¡±

ͼһ ¹«¹²ÓïÑÔÔËÐпâÉèÖÃ

³ÌÐò´úÂ룺
#include "stdafx.h"
#include "stdio.h"

#using "..\debug\AddDll.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Îļþ


ͼ¶þ 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
        *c = a + b;

        return S_OK;
}

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

        return S_OK;
}

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

        return S_OK;
}
      

£¨2£©VS2005ʹÓÃC#±àдµ÷ÓóÌÐò£¨ÍøÕ¾³ÌÐò£©

ʹÓÃVS2005½¨Á¢ÍøÕ¾UseCom

ÅäÖãºÔÚ½â¾ö·½°¸×ÊÔ´¹ÜÀíÆ÷ÖеÄÖ÷Ŀ¼µã»÷ÓÒ¼ü£¬Ñ¡ÔñÌí¼ÓÒýÓã¬Ñ¡ÔñCOM£¬Ìí¼Ó¸Õ¸Õ½¨Á¢µÄAddCom 1.0 Type Library

ÔÚ³ÌÐòÖÐÒªusing±àдµÄCOM×é¼þ£ºusing ADDCOMLib;


ͼÈý ÒýÓÃ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(10, 20, out iresult);
        add.fadd((float)1.2,(float)2.3, out fresult);
        add.isub(100, 10, out 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
        *c = a + b;

        return S_OK;
}

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

        return S_OK;
}

STDMETHODIMP CAdd::isub(int a, int b, int *c)
{
        // TODO: Add your implementation code here
        *c = 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();   
        
}
ÎÄÕ³ö´¦:http://www.vckbase.com/document/viewdoc/?id=1852
2Â¥2010-06-09 08:54:50
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ ¶¹×ӵ͹ µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] Ò»Ö¾Ô¸ Î÷±±´óѧ ×Ü·Ö282 Ó¢ÓïÒ»62 Çóµ÷¼Á +3 18419759900 2026-03-25 3/150 2026-03-25 23:20 by peike
[¿¼ÑÐ] 316Çóµ÷¼Á +9 ÁºÜçö© 2026-03-19 9/450 2026-03-25 23:01 by peike
[¿¼ÑÐ] 292Çóµ÷¼Á +6 ¶ì¶ì¶ì¶î¶î¶î¶î¶ 2026-03-25 7/350 2026-03-25 22:04 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] Ò»Ö¾Ô¸ºÓ¹¤´ó 081700 276Çóµ÷¼Á +3 µØÇòÈÆ×ÅÌ«Ñôת 2026-03-23 3/150 2026-03-25 19:10 by ÎíÉ¢ºóÏàÓölc
[¿¼ÑÐ] 085600²ÄÁÏÓ뻯¹¤µ÷¼Á +9 A-¶ßÀ²ZÃÎ 2026-03-23 15/750 2026-03-25 11:18 by Ainin_
[¿¼ÑÐ] Çóµ÷¼Á Ò»Ö¾Ô¸ ±¾¿Æ ±±¿Æ´ó »¯Ñ§ 343 +4 13831862839 2026-03-24 5/250 2026-03-25 09:47 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] 085601Çóµ÷¼Á×Ü·Ö293Ó¢Ò»Êý¶þ +3 ¸ÖÌú´óÅÚ 2026-03-24 3/150 2026-03-24 22:03 by bingxueer79
[¿¼ÑÐ] 311Çóµ÷¼Á +3 ¶¬Ê®Èý 2026-03-24 3/150 2026-03-24 21:31 by peike
[¿¼ÑÐ] ²ÄÁÏ¿¼Ñе÷¼ÁÉú +3 »ÆÁ»Ò»ÃÎǧÄê 2026-03-24 3/150 2026-03-24 17:00 by barlinike
[¿¼ÑÐ] Ò»Ö¾Ô¸¼ª´ó»¯Ñ§322Çóµ÷¼Á +4 17501029541 2026-03-23 6/300 2026-03-24 10:21 by ´÷Χ²±µÄСÎÃ×Ó
[¿¼ÑÐ] Ò»Ö¾Ô¸ºÓ±±¹¤Òµ´óѧ0817»¯¹¤278·ÖÇóµ÷¼Á +7 jhybd 2026-03-23 12/600 2026-03-24 09:03 by jhybd
[¿¼ÑÐ] 284Çóµ÷¼Á +3 yanzhixue111 2026-03-23 6/300 2026-03-23 22:58 by pswait
[¿¼ÑÐ] 276Çóµ÷¼Á +3 YNRYG 2026-03-21 4/200 2026-03-23 08:31 by ×íÔÚ·çÀï
[¿¼ÑÐ] Ò»Ö¾Ô¸¶«»ª´óѧ»¯Ñ§070300£¬Çóµ÷¼Á +7 2117205181 2026-03-21 8/400 2026-03-22 22:55 by chixmc
[¿¼ÑÐ] ѰÕÒµ÷¼Á +4 ¾óǿâ? 2026-03-21 4/200 2026-03-22 16:14 by ľÍÐζ¶
[¿¼ÑÐ] Çóµ÷¼Á +5 Zhangbod 2026-03-21 7/350 2026-03-22 13:13 by Zhangbod
[¿¼ÑÐ] 085600²ÄÁÏÓ뻯¹¤306 +4 z1z2z3879 2026-03-21 4/200 2026-03-21 23:44 by ms629
[¿¼ÑÐ] ²ÄÁÏ 271Çóµ÷¼Á +5 Õ¹ÐÅÔÃ_ 2026-03-21 5/250 2026-03-21 17:29 by ѧԱ8dgXkO
[¿¼ÑÐ] Ò»Ö¾Ô¸Î人Àí¹¤²ÄÁϹ¤³Ìר˶µ÷¼Á +9 Doleres 2026-03-19 9/450 2026-03-20 22:36 by JourneyLucky
[¿¼ÑÐ] 353Çóµ÷¼Á +3 À­¹³²»Ðí±ä 2026-03-20 3/150 2026-03-20 19:56 by JourneyLucky
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û