天天看點

如何從c++中調用c#的com元件

開發環境VS2005

1、  首先建立一個c#的類庫項目。

2、  将AssemblyInfo.cs檔案中的[assembly: ComVisible(false)]改為[assembly: ComVisible(true)],或者在項目屬性中“應用程式”構選上“使程式集com可見”複選框。

3、  在項目屬性中”生成”構選上”為com interop注冊”複選框。

4、  參考以下代碼及MSDN中COM 類示例(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、  編譯,這時候會生成*.dll檔案和*.tlb檔案

6、  建立一個vc++的控制台項目,将*.tlb檔案拷貝到vc++工程目錄下

7、  Vc++代碼如下:

#include

"stdafx.h"

#import

"Youtube.tlb"

#include

<stdio.h>

#include

<comutil.h>

#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一起,運作程式則測試ok!