close

目的: 使用C#寫COM DLL , 使用VC2008 呼叫此COM DLL內函式來用
(通常都是用C++寫COM DLL再給別人用 ,所以 其實這麼做是沒有太大意義的 )

參考來源 http://tech.ddvip.com/2009-02/1233554585106909.html

JK講解:
A部分 ....C#
B部分 ...VC++



A.1 用C#寫類別庫
A.2 注意 要在專案屬性 > 組件> 設為 COM Visible ~ 注意!!  COM組件名稱  COM組件命名空間 
A.3 注意namespcee名稱 類別名稱 函式名稱 三者都要有
A.4 編譯生出DLL

============
接著開VC++2008 建立一個win32專案
B1.資源檢視器> 組態屬性>右邊細項的Commom Language Runtime支援 要選 支援CLR
B2.先把COMDLL檔案放到DEBUG資料夾
B3.配合兩句語法來引入dll檔案
//------------------
#using "..\debug\c2.dll"
using namespace c2;

B4.以上編譯沒錯的話 繼續到主程式區創立類別實體物件
類別名 ^物件名= gcnew 類別名 (很奇怪的方式 似乎是一種指標型態類別物件)
//-------------------
CC ^bbb =gcnew CC();

B5.以上沒錯的話 應該能使用物件bbb來呼叫函數了 (但是bbb是指標物件要用 -> 而不用 . )
//--------------
int aa= bbb->AA(); //有提示視窗了 選函式AA() ,有回傳值1


成功了!!!







以下為細部範例1 by JK    (C++部分  引用C#  和VB 寫的COMdll)
=====================
// 32.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"

#using "..\debug\c2.dll" // 當COM組件名稱剛好 = COM組件空間名
using namespace c2;  // 當COM組件名稱剛好 = COM組件空間名


// 設 COM VISIBLE的時候可以設定 1. COM組件名稱  2.COM 組件命名空間
#using "..\debug\VB_com1.dll"// 組件名稱
using namespace VBN;  // 組件命名空間


int _tmain(int argc, _TCHAR* argv[])
{

 VBC ^ppp=gcnew VBC();
 int Q=ppp->bb ();

//------------------------

 CC ^bbb =gcnew CC();
 int aa= bbb->AA();
 aa=aa;
 //int a = makeLIB.kk();
 return 0;
}











以下為引用細部範例2
http://tech.ddvip.com/2009-02/1233554585106909.html

===================================
A.

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

==================================

B.

(2)C++编写调用程序

  建立C++的Win32控制台应用程序UseDll,项目类型为:Win32控制台应用程序

  配置:右键点击解决方案资源管理器中的UseDll,选择“属性”,将公共语言运行库支持设置为“公共语言运行库支持(/clr)”



程序代码:

#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;
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 prague12 的頭像
    prague12

    prague12

    prague12 發表在 痞客邦 留言(0) 人氣()