2015年11月20日 星期五

[WPF] 利用介面檔,在不同專案間傳值. Passing Values Between Multiple Projects by Interface

Step 1. (建立介面檔) 新增專案 -> 選擇類別庫 -> 確定.

Step 2. 建立後會是一個類別(Class), 將類別改為介面(Interface),並新增一成員(passValue),如下圖所示.

Step 3. 完成後執行(快捷鍵 F5),會出現下圖訊息,不用太在意,按OK.

Step 4. 到該專案的Debug目錄下,即可看到產生一個.dll,之後會用到. 

 Step 5. 建立第一個專案,記得選WPF應用程式.

 Step 6. 接著,加入剛建立.dll檔.

 Step 7. 將剛建立.dll (Interface.dll) 打勾->確定.

Step 8. 加入程式碼,如下圖.

Step 9. 執行(F5).

 Step 10. 執行後,會在該專案的Debug目錄下產生.exe檔 (getValue.exe),在另一個專案會用到.

Step 11. 建立第二個專案.

 Step 12. 加入getValue.exe和Interface.dll 到該專案的參考.

  Step 13. 將getValue.exe和Interface.dll 打勾加入到該專案的參考.

Step 14. 加入程式碼,如下圖. (完成).

Step 15. 執行結果.

P.S.,有原始碼附件 Source Code

2 則留言:

匿名 提到...

您好,我目前在撰寫一個專題是希望兩個WindowsFormsApp可以單向傳值,其中一個App是做影像辨識,另一個程式是做機械手臂的控制(已完成),我想達到的目的是影像處理完我可以得到目標物座標值後持續存入一組陣列中(已完成),期望將這組陣列傳到機械手臂控制的App中做為我搜尋路徑的參考點,但是一直無法成功傳值,我嘗試了您列舉的方法,但還是無法成功傳值,以下是我的傳值程式撰寫內容,希望您可以給我一點意見,非常感謝您!

//介面檔的內容
namespace Interface
{
public interface interface1
{
int[] passValue{set; get;}//我期望是陣列但不知道這樣寫有沒有錯
}
}
//影響處理的程式
Interface.interface1 iFace;

public void getValues(Interface.interface1 interFace)
{
this.iFace = interFace;
iFace.passValue[0] = Global.rx; //Global.rx 處理完後的座標
iFace.passValue[1] = Global.ry; //Global.ry 處理完後的座標
iFace.passValue[2] = Global.lx; //Global.lx 處理完後的座標
iFace.passValue[3] = Global.ly; //Global.ly 處理完後的座標
}

//機械手臂控制主程式中呼叫影像取值得部分
public void get_value()
{

WindowsFormsApp4.Form1 getvalue = new WindowsFormsApp4.Form1(); //這行無法建置成功
//錯誤訊息為
//System.BadImageFormatException: '無法載入檔案或組件 'WindowsFormsApp4, Version=1.0.0.0,
//Culture=neutral, PublicKeyToken=null'
//或其相依性的其中之一。 試圖載入格式錯誤的程式。'
getvalue.getValues(this);
Global.rx = passValue[0];
Global.ry = passValue[1];
Global.lx = passValue[2];
Global.ly = passValue[3];
}

匿名 提到...

這篇文傳值的方式沒有使用到 interface