²é¿´: 891  |  »Ø¸´: 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µÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ ¶¹×ӵ͹ µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[»ù½ðÉêÇë] Ϊʲô×ÊÖúÊý¸÷´ó¸ßУ¶¼´´Ð¸ߣ¬×Ô¼ºÉêÇëÔõô¾ÍÕâôÄÑ +10 Kittylucky 2026-08-27 10/500 2026-08-28 07:10 by sincosx
[»ù½ðÉêÇë] ¹ú×ÔÈ»ÃæÉϸ´ÅÌ~»¶Ó­ÌÖÂÛ (½ð±Ò+5) +11 ÇçÌì¼ÓÓÍ 2026-08-26 12/600 2026-08-28 01:22 by li09465290@
[»ù½ðÉêÇë] ÄÄλ¸ßÈËÖÐÁË£¬°Ñ²éѯµ½µÄ½ØÍ¼Ìù³öÀ´ÈÃÎÒ¿´¿´£¬ÈÃÎÒ³¤³¤¼ûʶ +5 yuleib84 2026-08-26 6/300 2026-08-28 00:02 by yudaoqian88
[»ù½ðÉêÇë] »ù½ðδÖУ¬ÕâÖÖ´ð¸´ÊÇÄ£°åÂ𣿠+5 zhaosm1982 2026-08-27 6/300 2026-08-27 16:00 by lfy8008
[ÎÄѧ·¼²ÝÔ°] ÃÎÏë +3 myrtle 2026-08-26 3/150 2026-08-27 10:01 by angelyueyi
[»ù½ðÉêÇë] Ϊʲô ¹ú¼Ê(µØÇø)ºÏ×÷Óë½»Á÷ÏîÄ¿ ûÓзŰñ£¿ 10+3 majunge000 2026-08-26 11/550 2026-08-27 08:42 by ±±¾©À³Òð±à¼­
[˶²©¼ÒÔ°] ÊÛSCIÒ»ÇøT0PÎÄÕ£¬ÎÒ:8.O.55.1.O.54,¿ÆÄ¿ÆëÈ«,¿É+¼± +3 LIbGuocjEEYw 2026-08-26 4/200 2026-08-27 02:01 by Ie9AyIAvGbvs
[»ù½ðÉêÇë] ÎÒ²»Àí½â£¡ +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[»ù½ðÉêÇë] ϵͳ²é²»µ½ +10 ¶­°Ëǧ 2026-08-26 10/500 2026-08-26 16:30 by Equinoxhua
[»ù½ðÉêÇë] ·¶½øÖоÙÒ»ÎĵÄÖÐÐÄ˼Ïë +9 Ñ׻ƹóëÐ 2026-08-22 10/500 2026-08-26 15:40 by semaglutide
[»ù½ðÉêÇë] 2026Äê8ÔÂ25ÈÕ¹ú×ÔÈ»·Å°ñǰͻȻÊÕµ½ÁÐÈëÆÀÉóר¼ÒÓʼþ£¬ÓйØÏµÂ𣿠+25 ľˮ˼¶¹ 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[»ù½ðÉêÇë] Ϊʲô¹ú×ÔÈ»²»ÄÜÖ±½Ó¹«²¼ +4 bjdxyxy 2026-08-26 4/200 2026-08-26 13:12 by qingmu1201
[»ù½ðÉêÇë] ÏîÄ¿ÐÅÏ¢ºÍ¾­·ÑÐÅÏ¢ÔÚϵͳÀï¶¼¿ÉÒÔ¿´µ½ÁË +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[»ù½ðÉêÇë] ¹úºÏ¿É²éÁË +3 paperzjh 2026-08-26 3/150 2026-08-26 10:41 by LemmonTr
[Ö°³¡ÈËÉú] ѧÉúײ¼û¸¨µ¼Ô±ËÍÍâÂô£¬µÚ¶þÌìÈ«°à¶¼³ÁĬÁË +3 ¾¨ÓãÈÚ½ð_Õã½­_É 2026-08-22 3/150 2026-08-26 09:01 by zzuzxg
[»ù½ðÉêÇë] ÔÚ¼á±ù»¹¸Ç×ű±º£µÄʱºò£¬ÎÒ¿´µ½ÁËÅ­·ÅµÄ÷»¨¡£ (½ð±Ò+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[»ù½ðÉêÇë] Ã÷ÌìÓ¦¸Ã¿É²éÁË£¡£¿ +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[»ù½ðÉêÇë] ûÓÐÈκÎÏûÏ¢-ÊDz»ÊǾÍÁ¹ÁË +9 ͼÀ²Í¼À² 2026-08-24 10/500 2026-08-25 11:59 by ÄϺ£Ð¡¸ç
[»ù½ðÉêÇë] ½¨Òé»ù½ð·¢²¼Ìáǰ¸ø³öÃ÷È·µÄʱ¼äµã +13 kulium 2026-08-21 16/800 2026-08-24 16:27 by superceng
[»ù½ðÉêÇë] ¿´À´½ñÌì²»»á·Å°ñÁË£¿ +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û