2010-01-28 78 views
0

我是一名編程學生,現在我已經在C#中有兩個類,本學期我正在學習第一個C++類。是否可以從C++應用程序調用C#應用程序?

出於好奇,是否可以從C++應用程序調用C#應用程序?

如果是這樣,是否也有可能檢查運行該程序的計算機是否具有.NET框架?

我只是好奇,我想如果可能的話,這將是一個偉大的小程序來編寫和作爲未來的工具。

只是爲了您的信息,這裏有我想要做什麼:

  • 檢查,以查看是否在計算機上安裝.NET框架
  • 如果不是,詢問用戶是否願意安裝它,如果他們會,請下載並安裝框架
  • 叫我的程序用C#編寫,然後殺了C++程序
+2

由於這裏存在多個與半無關的問題,所以最好單獨提出問題...... – 2010-01-28 01:40:04

+2

在*執行*中調用或在*進程間通信中調用*? – 2010-01-28 01:40:15

回答

1

出於好奇,是否可以從C++應用程序調用C#應用程序?

是的。這裏有幾個選項。如果使用C++/CLI,則可以直接在C++中使用C#中定義的類型。否則,一種典型的方法是使用COM,將C#類型作爲COM對象。

如果是這樣,是否也有可能檢查運行該程序的計算機是否具有.NET框架?

是的。在這裏,通常,您只需將該框架與您的應用程序一起安裝。這裏有一個頁面shows a few options for checking which version of .NET (if any) is installed

3

有許多方法可以從C#調用.Net代碼。

您可以使用COM Interop公開一個類,也可以使用C++/CLI創建一個「橋」。

你可以通過exporting methods from the C# DLL在「raw」C++(沒有COM)的情況下做到這一點。

然而,就你而言,你可能只需使用CreateProcess啓動C#EXE文件。

0

一個C#(實際上是.NET)應用程序實際上是一個非託管的stub exe文件,用於加載.NET環境,然後跳轉到C#代碼中。

換句話說,一個C#應用程序總是包含在非託管進程中。因此,如果您願意限制自己使用C#DLL而不是C#應用程序,則可以將它們託管在您自己的C++進程中。看到

  • 檢查是否已在計算機上安裝.NET框架
  • 如果不是,詢問用戶是否願意安裝它,如果他們願意,請下載並安裝框架
  • 初始化。NET運行時,加載我的C#庫到它並跳轉到C#代碼。
  • 利潤

注意這裏的區別是,你永遠不關機的C++程序,它就會成爲你的C#代碼的主機 - 這基本上是當你運行一個C#應用程序什麼Windows不反正。

相關問題