C++技巧從c++中調(diào)用c#的com組件

字號(hào):

1、 首先創(chuàng)建一個(gè)c#的類(lèi)庫(kù)項(xiàng)目。
    2、 將AssemblyInfo.cs文件中的[assembly: ComVisible(false)]改為[assembly: ComVisible(true)],或者在項(xiàng)目屬性中“應(yīng)用程序”構(gòu)選上“使程序集com可見(jiàn)”復(fù)選框。
    3、 在項(xiàng)目屬性中”生成”構(gòu)選上”為com interop注冊(cè)”復(fù)選框。
    4、 參考以下代碼及MSDN中COM 類(lèi)示例(C# 編程指南):
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    namespace Youtube
    {
    [Guid("FA1BEAD8-D5E2-4a70-ACDF-0A7FB4DA17FD")]
    public interface IYoutubeService
    {
    void UploadFile();
    }
    [Guid("2BD4711C-CAC0-4df5-B167-447FCD00D55C"),
    ClassInterface(ClassInterfaceType.AutoDispatch)]
    public class YoutubeService : IYoutubeService
    {
    public void UploadFile()
    {
    Console.WriteLine("My Com Test!");
    }
    }
    }
    5、 編譯,這時(shí)候會(huì)生成*.dll文件和*.tlb文件
    6、 創(chuàng)建一個(gè)vc++的控制臺(tái)項(xiàng)目,將*.tlb文件拷貝到vc++工程目錄下
    7、 Vc++代碼如下:
    #include "stdafx.h"
    #import "Youtube.tlb"
    #include
    #include
    #pragma comment(lib,"comsuppw.lib")
    using namespace Youtube;
    int _tmain(int argc, _TCHAR* argv[])
    {
    CoInitialize(NULL);
    try
    {
    IYoutubeServicePtr service( __uuidof( YoutubeService ) );
    service->UploadFile();
    }
    catch (const _com_error& e)
    {
    }
    CoUninitialize();
    return 0;
    }
    8、編譯程序,并把之前的*.dll文件拷貝到和生成exe一起,運(yùn)行程序則測(cè)試ok!