關(guān)于matlab與c混合編程的問題_第1頁
關(guān)于matlab與c混合編程的問題_第2頁
關(guān)于matlab與c混合編程的問題_第3頁
關(guān)于matlab與c混合編程的問題_第4頁
關(guān)于matlab與c混合編程的問題_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

關(guān)于matlab與c#混合編程的問題

2012-06-0600:45shulai1008|瀏覽1573次

在c#中輸入相應(yīng)的函數(shù),如何把這個函數(shù)傳遞給matlab中的m文件,并且是按照函數(shù)來

識別的

分享到:

2012-06-0611:08

再不玩〃瘋狂攀巖〃你就OUT啦!

提問者采納

你是指,參數(shù)傳遞吧,怎么會有函數(shù)傳遞呢

以下代碼,供你參考,涉及到參數(shù)轉(zhuǎn)換和傳遞,不懂的再補(bǔ)充吧

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingMathWorks.MATLAB.NET.Arrays;〃在MWArray.dll,最常用的

usingMathWorks.MATLAB.NET.Utility;//在MWArray.dll,最常用的

usingtest_erfc;//我在matlab中采樣deploytool編譯成test_erfc.dll

namespaceerfccc

(

classProgram

(

staticvoidMain(string[]args)

(

test_erfc.test_erfcclassE=newtest_erfcclass();

0。11$0?.\/7?31_而3(”輸入*的值:'*);

intx=Convert.Tolnt32(Console.ReadLine());

MWArray[]result=E.erfc(1,(MWArray)x);〃第一個參數(shù)取決于你的erfc有

幾個返回參數(shù)

MWNumericArrayr1=(MWNumericArray)result[O];

double[,]locationl=(double[,])r1.ToArray(MWArrayComponent.Real);

Console.WriteLine(location1[0,0].ToString());

Console.ReadLine();

)

)

)

追問:

我的意思是如何將如sin(x)/x這樣的表達(dá)式傳遞給ma

tlab,完成從c#中輸入表達(dá)式和積分上下限求積分的

功能

追答:

這個我就不懂了,我也不知道能不能實現(xiàn),

如果是將表達(dá)式在matlab代碼中固定,在C#中只傳

積分上下限的話可以實現(xiàn)

追問:

嗯,那也還是謝謝你了

追答:

如果你的函數(shù)有限,建議你還是寫在matEb程序里,

通過整型參數(shù)來識別用哪個函數(shù)

Matlab和C#混合編程

作者:qxvfish(站內(nèi)聯(lián)系TA)發(fā)布:2013-11-14

在實驗室算法演示和工程應(yīng)用中存在這樣的困惑:

1.Matlab精通各種數(shù)值計算和算法,但是沒有優(yōu)美的界面,更不用說對數(shù)據(jù)庫訪問操作。

2.Visualstudio(C#)擁有完美的界面編程,窗口或網(wǎng)絡(luò)編程已經(jīng)優(yōu)越的數(shù)據(jù)庫訪問等優(yōu)勢。

3.國外有一本書叫:MATSBC#Book圖書(已經(jīng)放到壓縮包中了),看過以后收獲不少。

4.結(jié)合各種材料,我使用visualstudio2012+matlab2013a實現(xiàn)了從

Winfrom調(diào)用Matlab命令行繪圖

Winfrom調(diào)用.m文件編譯的dll并在WebBrowser中顯示結(jié)果

fl

調(diào)用Matlab命令demo

0LU9P||G附酰

9

**?1?A3

-:?***

9

?S

5!

ce

2*

1S

St

**1

ttat,"

IX"

a

…£

■%1Q9it'9t?ffl9O

<MQMIUM3OIMM?A00MluwzQ>3MIVM匕O?SMWIAWnWima

02W?

的防宴空源君理靠▼B

ge?二s同窗:旦

?:)a

卬嶙坊案"WinFormCallMatlab-(1個項目)

*廬WinFormCallMatlab

Df*Properties

-巴引用

magicpro

,■MicrosoftCSharp

?"MLApp

MWArray

■■System

*■System.Core

System.DaU

System.Data.DataSetExtensions

"■System.Deployment

System.Drawing

,■System.Wrndow$.Forms

SystemJCml

?■SystemJCmLLinq

■ServiceReferences

口Appxonfig

/3CallMatlabFunctionByDLLcs

?liGillMatiabFunctionByDLLrDesignerxs

力CallMatiabFunctionByDLLresx

?飛CallMatiabFunctionByDLL

/國CallMatlabViaMatlabCommand.cs

?CallMatlabV1aMatlabC0mm4nd.Designer.cs

CallMatiabViaMatlabComm4nd.resx

?,CallMatlabViaMatlabCommand

/國mainFbrm.c$

?!mainForrn.Designer.es

1JmainForm.resx

?、mainForm

>。Program.cs

度性帳友方案野蔣香瑾X國》、資源苣理81

解決方案結(jié)構(gòu)

WinFormCallMatlab.rar-WinRAR

文件(F)命令(C)T*(S)收藏夾(O)選項(N)幫助(H)

囹§WinFormCallMatlab.rar-RAR欣蚊件,解包大小為3,946,725:

B,MATLABCSharp.pdf

壓縮包中包含MATLABCSharp.pdf

回到目錄

L前言

MatlabBuilderNE工具箱是與C#混編的工具箱,里面的幫助文檔很詳細(xì),提供了4種情

況下與.NET混合編程的案例。

1.是簡單的組件集成,通過Matlab生成DII程序集,在.NET環(huán)境中,通過MWArray組件

來調(diào)用;

2.還有一個是在Web環(huán)境下使用Figure和混編的情況,與1比較類似;

3另外一個就是我們今天要講到的基于類型安全的接口編程以及對WCF和M訐的支持;

4.最后一個是在.NETRemoting技術(shù)中的使用。

在初級入門教程中,以及我現(xiàn)在的混編開發(fā)中,都只是用到了第1個方法,和很簡單,也

很快,當(dāng)然要你掌握了很多基礎(chǔ)技術(shù)之后才能達(dá)到這個水平。今天要見到的基于接口的編程,

有一個很大的好處就是可以避免類型轉(zhuǎn)換,因為之前的方法都有大量的.NET和Matlab類

型進(jìn)行轉(zhuǎn)換,基礎(chǔ)不扎實的朋友很容易搞混淆。而基于接口的編程,則可以避免很多問題,

但同時也對基礎(chǔ)提出了更高的要求,要對接口定義,作用,以及方法多態(tài)等面向?qū)ο蟮奶匦?/p>

更加了解。

下面截圖是在Matlab幫助的說明:

Writing.NETapplicationsthatcanaccess.NETmethodsthatComDonentIntegration

encapsulateMATLABcode

SampleapplicationsthataccessmethodsdevelopedinMATLABComponentIntegration

Learnaboutcreatingtype-safeinterfaces,inordertoavoiddataType?SafgInterfaces,WCF,andMEF

conversiontaskswithMWArray.

Deploying.NETcomponentsovertheWebWebDEploymentofFiguresandImages

Creatingaremotablecomponentorlearningaboutremotable.NETRemoting

components

回到目錄

2.Type-SafeInterfaces簡單說明

與直接編譯為.NET程序集的要求不同,使用這項技術(shù)對.NET程序員的要求小很多,只需要

很少的Matlab知識,但要對.NET技術(shù)精通,

之前由于Matlab的數(shù)據(jù)類型和.NET的基本數(shù)據(jù)類型不兼容,所以為了使得Matlab和.NET

程序進(jìn)行數(shù)據(jù)通信,就需要使用下面的技術(shù):

l)Marshaldatafrom.NETinputdatatoadeployedfunctionbycreatinganMWArr

ayobjectfromnative.NETdata.

ThepublicfunctionsinadeployedcomponentreturnMWArrayobjects.

2)MarshaltheoutputMATLABdatainanMWArrayintonative.NETdatabycallin

goneoftheMWArraymarshalingmethods(ToArrayO,forexample).

所以使用傳統(tǒng)的混編方式,又很多數(shù)據(jù)類型轉(zhuǎn)換的過程。而在使用Type-SafeInterfaces技術(shù)

后,這些中間過程都可以忽略,

只需要關(guān)系輸入的.NET類型以及輸出的.NET類型結(jié)果,Matlab會對數(shù)據(jù)進(jìn)行內(nèi)部的轉(zhuǎn)換處

理??梢钥纯辞昂?副圖的對比:

SimplifiedDataMarshalingWithaType-SafeInterface

ManualDataMarshalingWithoutaType-SafeInterface

因此,我們可以很明顯的看到Type-SafeInterfaces帶來的優(yōu)勢:

Youavoidtrainingandcodingcostsassociatedwithteachingenduserstoworkwi

thMWArrays.

YouminimizecostofdatayoumustmarshalbyeitherplacingMWArrayobjectsin

type-safeinterfacesorbycallingMWArray-basedfunctionsinthedeployedcom

ponent.

Flexibility—youmixtype-safeinterfaceswithmanualdatamarshalingtoaccomm

odatedataofvaryingsizesandaccesspatterns.

Forexample,youmayhaveafewlargedataobjects(images,forexample)thatwo

uldincurexcesscosttoyourorganizationifmanaged

withatype-safeinterface.Bymixingtype-safeinterfacesandmanualmarshaling,

smallerdatatypescanbemanaged

automaticallywiththetype-safeinterfaceandyourlargedatacanbemanagedon

anas-neededbasis.

回到目錄

3.Type-SafeInterfaces實際案例

對這個混編方式,很顯示可以節(jié)省很多事情,我認(rèn)為,作為原始的數(shù)據(jù)類型轉(zhuǎn)換方式,還是

應(yīng)該掌握的。在掌握了之后,再使用這個方法,會事半功倍,畢竟不是所有的問題都可以用

接口解決。接下來,就讓我們一起用一個小的編程實例,來演示整個過程的使用。

演示環(huán)境:VisualStudio2010,Matlab2012a,.NET4.0

演示內(nèi)容:一個簡單的乘法運算混編實現(xiàn)

一、新建T類庫類型的項目,名稱MatlabDemo,.NET4.0,如下圖所示:

溫廝項目________

三J制圖居

最近的模板,NETFramework4▼排序依據(jù):刖S

已安裝的模板▲

VisualC#

Windows窗體應(yīng)用程序VisualC#

*豆)

/VisualC#用于創(chuàng)建C#類國

Windows

畫WPF應(yīng)用程序VisualC#

Web

Cloud控制臺應(yīng)用程序VisualC#

Reporting

E

Silverlight國VisualC#

WCF1

1

Workflow圍WPF涎覽器應(yīng)用程序VisualC#

其他語言Windows服務(wù)VisualC#

其他項目類型—

數(shù)據(jù)庫時WPF用戶控件庫VisualC#

聯(lián)機(jī)模板

WPF目定濃件庫VisualC#▼

一、在上面的項目中添加一個接口文件IMultiply.cs,并編寫下面的代碼,因為我們實現(xiàn)的

是一個簡單的乘法,所以添加如下幾個接口方法:

1namespaceMatlabDemo

2{

3///<summary>乘法接口</$1111111120>

4publicinterfaceMultiply

5(

6//2個數(shù)直接相乘

7doublemultiply(doublex,doubley);

8

9//數(shù)組相乘

10doublet]multiply(double[]x,doubley);

11

12〃矩陣相乘

13doublet,]multiply(doublet,]x,doublet,]y);

14)

15)

這里注意,一定要將接口的可訪問性設(shè)置為Public,否則混編的時候,Matlab會找不到

接口原型,編譯失敗。編寫好,編譯項目即可,會在bin文件夾下得到MatlabDemo.dll

文件,這個文件下面的步驟會用到。

三、編寫M函數(shù),并設(shè)置混編項目。我們編寫一個簡單的乘法M函數(shù)m,如下所示:

1functionz=multiply(x,y)

2

3z=x*y;

注意這里的名稱一定要和接口方法的名稱對于起來,否則Matlab怎么會認(rèn)識,想想就明白

了。然后在Matlab中輸入deploytool命令,輸入項目名稱:TypeSaftDem。,并選擇項

目類型:.NETAssembly,這個過程是"混編三部曲"基本過程,以前的視頻中專門見到了,

不仔細(xì)說明,如下圖所示:

.NETAssembly

es

nent

2C

|與JavaPackage

確定之后,混編項目基本就建立了,然后新建一個類DemoTest,并把上面編寫的

multiply.m函數(shù)添加到這個類中去,這其實就是一個常規(guī)的混編過程,很簡單。添加完成

之后,如果是普通的混編方式,直接編譯就可以了,但基于接口的混編方式,還有一個過程

要設(shè)置,看下圖,單擊混編項目的設(shè)置(Settings...):

向口,x.NETAssembly

3tOplot▼品TypeSaftDemo.prj

Min

BuildPackageNewProject...

OpenProject...

Classes

?DemoTest&RenameProject

芻multiply.m⑥AddClass

[Addfiles]

AddMCR

「AddClassi

QBuild

SharedResourcesandHelperAles

夠Package

Placeimages,datafiles,and

referencedbyanyfunctions.?Settings…j

Alsoplacehere:?Help

f■□,X?Functionscalledusingeval(anditsvariants)

?FunctionsnotontheMATLABpath

?Privatefunctions

如下圖,打開設(shè)置后,選擇"TypeSafeAPI"選項卡:

首先,選擇我們在第一個過程中編寫好的MatlabDemo.dll接口文件,選擇后,程序會自

動搜索該dll中的可用接口(公開的),在.NETinterface下拉列表中顯示,選擇你需要的,

這里我們是【Multiply,如下圖所示的MatlabDemo.【Multiply,然后選擇該接口和Matlab混

編程序中對于的類我們的multiply.m函數(shù)在DemoTest類中,如下圖的Wrappedclass:

設(shè)置完成之后,關(guān)閉即可。然后編譯,如果沒有問題,提示編譯成功之后,打開編譯好的

文件夾,我們可以看到如下3個dll文件:

Package(98KB)

|qDemoTestIMultiply.dll

readme.txt

[,':<6TypeSaftDemo.dll

?ITypeSaftDemooverview.html

[飆TypeSaftDemoNative.dll

[Addfiles/directories][AddMCR1

生成的3個文件JypeSafeDemo.dll其實和普通的混編方式是一樣的,可以和以前數(shù)據(jù)類

型轉(zhuǎn)換的方式一樣使用;而DemoTestIMultiply.dll和TypeSafeDemoNative.dll這2個

一起使用,Matlab已經(jīng)在內(nèi)部將數(shù)據(jù)轉(zhuǎn)換過程封裝好了,直接使用即可。第一種方式就不

演示了,直接演示如何用接口來計算乘法。

五、C#調(diào)用混編好的dll計算結(jié)果。在上一節(jié)中我們已經(jīng)說明了幾個dll的作用,下面將演

示他們的用法,將DemoTestIMultiply.dll和TypeSafeDemoNative.dll一起復(fù)制到測試

項目的C#項目中省新建一個控制臺測試項目)分別添加這幾個dll的引用:MWAarray.dll

和DemoTestIMultiply.dll以及TypeSafeDemoNative.dll。然后添加命名空間,具體核心

代碼如下所示:

1usingSystem;

2usingSystem.Collections.Generic;

3usingSystem.Linq;

4usingSystem.Text;

5

6usingMathWorks.MATLAB.NET.Arrays;

7usingMathWorks.MATLAB.NET.Utility;

8

9usingTypeSaftDemo;

10

11namespaceTypeSaftTest

12{

13classProgram

14{

15staticvoidMain(string[]args)

16

17〃混編接口類的實例化

18DemoTestMultiplydi=newDemoTestIMultiply();

19doublet,]a=newdouble[2,2]{{1,2},{3,4}};

20doublet,1b=newdouble[2,2]{{6,7},{8,9}};

21〃分別演示接口的3種不同調(diào)用

22vartl=di.multiply(3,5);

23vart2=di.multiply(newdoublet]{1,2,3},5);

24vart3=di.multiply(a,b);

25Console.WriteLine(,z2個數(shù)直接相乘:"+tl.ToStringO);

26Console.Write("數(shù)組與單個數(shù)直接相乘:”);

27foreach(varitemint2)Console.Write(item.ToString()+z/

”);

28Console.WriteLine();

29Console.Write("矩陣乘法:”);

30foreach(varitemint3)Console.Write(item.ToString0+

"”);

31Console.ReadKey();

32)

33}

34)

結(jié)果如下圖所示:

?file:///D:/Work/Matlab/MatlabDemo/TypeSaftTest/bin/De

2個數(shù)直接相乘:15

數(shù)組與星個數(shù)直接相乘:51015

矩陣乘法:22255057

上面就是Matlab和C#基于接口的混合編程的詳細(xì)過程,混編是一個很有用的工具,

但要用好,其實真的很難,接觸混編這么長的時間以來,碰到過很多同學(xué)使用這個工具,絕

大部分是誤用,導(dǎo)致無故的工作量。要想混編成為自己工作和學(xué)習(xí)的得力助手,必須加強(qiáng)

Matlab和.NET基礎(chǔ)的學(xué)習(xí),只有2者的基礎(chǔ)掌握好了,足夠熟悉這2個平臺,你才可能

更順利的解決混編過程中遇到的問題。當(dāng)混編出了問題的時候,需要很多經(jīng)驗才能度過難關(guān),

這一點很重要,不要指望學(xué)會這個過程,就可以解決所有問題。期待Mathworks公司對

Matlab的混編編程支持越來越強(qiáng)大。

【原創(chuàng)】Matlab.NET混合編程技巧之直接調(diào)用Matlab內(nèi)

置函數(shù)

1.傳統(tǒng)的Matlab.NET混合編程步驟

傳統(tǒng)的Matlab.NET混合編程有2種方式:

DMatlab編寫好M函數(shù),利用deploytool編譯m函數(shù)生成dll,在C#項目中引用并調(diào)

用;

2)基于接口的編寫方式,也是利用deploytool工具,過程繁瑣一點,對編程人員素質(zhì)要求

高一點,但不需要進(jìn)行繁瑣的數(shù)據(jù)類型轉(zhuǎn)換。我的博客有一篇文章專門介紹了這個混合編程

方式,也有例子,大家有興趣的可以看看:

http:〃w/asxinyu/archive/2013/05/16/3082299.html

不管上面用哪種方式,Matlab和C#混編的基本步驟,大概都是下面的過程:

1)編寫M函數(shù),并首先在Matlab中測試是正確可以調(diào)用的。注意命名規(guī)范,注釋規(guī)范;

2)使用命令打開deploytool工具,設(shè)置項目名稱,選擇類型:.NETAssembly,然后新

建一個類,并添加編寫好的M函數(shù)

3)編譯,生成dll,并在C#項目中添加引用(還需要引用對應(yīng)版本的MWArray),利用對

象瀏覽器查看生成dll的方法結(jié)構(gòu),并根據(jù)Matlab和C#的類型轉(zhuǎn)換規(guī)則,進(jìn)行數(shù)據(jù)轉(zhuǎn)換

即可,如果是接口的編程,這個過程相對要簡單。

回到目錄

2.深入解析傳統(tǒng)混編所生成的代碼

2.1第一步:編寫M函數(shù),并測試可以使用

為了好我們今天的目的相匹配,特意封裝一個簡單的內(nèi)置函數(shù),plot,來畫一個簡單的圖形,

如下所示M函數(shù)

1functionPlotTest(n)

2%編寫一個簡單的函數(shù),對plot進(jìn)行簡單封裝一下

3plot(1:n,1:n);

4船則試正確,才可以進(jìn)行下一步工作

注意,混編必須是m函數(shù)function的形式才能被調(diào)用。上述函數(shù)簡單測試一下,沒有問題

(復(fù)雜的函數(shù)一定要多測試,否則后續(xù)調(diào)試常困難)。繼續(xù)下一步。

2.2第二步:在Matlab中使用deploytool建立混編項目

在Matlab工作區(qū)輸入命令:deploytool,然后得到下面界面,輸入混編項目的名稱,選擇

存儲位置,關(guān)鍵的是類型那里一定要選擇”.NETAssembly",如下圖所示:

選擇"0K"之后,下一步matlab界面右側(cè)會出現(xiàn)項目解決方案,需要添加類名稱和M文

件。這個類名稱,就是編譯完成之后C#項目中的類對象名稱,然后添加我們剛才上一步編

寫的"PlotTest.m",然后編譯即可,如下圖所示:

.NETAssembly…n

QPlotTest.prj▼巴夠?▼

BuildPackage

'lasses

?TestDemo

PlotTestm

「Addfilesl

「AddClassi

到此為止,一個常規(guī)簡單的Matlab.NET混編已經(jīng)完成了60%了。編譯完成之后,打開

"Package"選項卡,即可看到生成的dll文件,然后點擊右鍵,打開文件夾即可,如下圖

麻:

.NETAssembly

PlotTest.prj▼3!'d

Build[Package

Package(1KB)

PlotTestdll

>1PlotTest_overview.html

APlotTestNative.dll

readme.txt

「Addfiles/directories]

2.3查看混編生成的代碼

這個過程很關(guān)鍵,其實包含很多信息,只不過95%以上的人都沒有注意到其實混編生

成的dll是有源文件的,通過查看源文件就應(yīng)該知道混編的原理,只不過這是matlab自動

生成而已。那看看生成的源碼吧。

打開Matlab混編項目的目錄,可以看到有2個文件夾,"distrib","src"2個文件

夾。"distrib”文件夾就是上面圖中生成的dll,注意有2個dll,1個是"項目名稱dl",一個

是"項目名稱Native.dll"這2個dll的差別可以通過"distrib”文件夾源碼來觀察Jdistrib"

就是源代碼的文件夾。如下圖所示,src文件夾的文件示意圖:

名稱

mccEccludedFiles

生PlotTest.dll

畫PlotTest

jPlotTest_overview

1?^jPlotTestNative.dll

宣PlotTestNative

-readme

也TestDemo.es

TestDemoNative.es

我們2.2中新建的類名是TestDemo,所以生成的的源碼名稱也是TestDemo盾看這2個

cs文件中的代碼,同時類的方法也可以在VS中通過對象瀏覽器來查看dll有哪些方法以及

方法的參數(shù)類型。直接貼這2個cs文件的代碼,順便解釋和對比下:

TestDemo.cs文件源碼:

1/*

2*MATLABCompiler:4.17(R2012a)

3*Date:MonSep0916:19:012013

4*Arguments:〃-B〃〃macro_default〃〃-

z,dotnet:PlotTest,TestDemo,0.0,private"〃-T〃

5*〃link:lib〃〃-d〃

Z/D:\Work\DevelopMent_SVN\Matlab\MatlabBlog\PlotTest\src,zz/-wz,

6*,zenable:specified_file_mismatch,z〃-w〃z,enable:repeated_file,z〃-

7*^enable:switch_ignored,,〃-,zenable:missing_lib_sentinelz,〃-

enable:demo_license,z

8*,〃-v〃

“class{TestDemo:D:\Work\DevelopMent_SVN\Matlab\MatlabBlog\PlotTest.m)

9*/

10usingSystem;

11usingSystem.Reflection;

12usingSystem.10;

13usingMathWorks.MATLAB.NET.Arrays;

14usingMathWorks.MATLAB.NET.Utility;

15

16#ifSHARED

17[assembly:System.Reflection.AssemblyKeyFile(@,,/,)]

18#endif

19

20namespacePlotTest

21{

22

23III<summary>

24IIITheTestDemoclassprovidesaCLScompliant,MWArrayinterface

totheM-functions

25///containedinthefiles:

26///<newpara></newpara>

27IIID:\Work\DevelopMent_SVN\Matlab\MatlabBlog\PlotTest.m

28///<newpara></newpara>

29IIIdeployprint,m

30III<newpara></newpara>

31/IIprintdig.m

32III</summary>

33III<remarks>

34III?Version0.0

35///</remarks>

36publicclassTestDemo:IDisposable

37{

38SregionConstructors

39

40III<summaryinternal=

41IIIThestaticconstructorinstantiatesandinitializesthe

MATLABCompilerRuntime

42IIIinstance.

43///</summary>

44staticTestDemo()

45(

46if(MWMCR.MCRAppInitialized)

47{

48Assemblyassembly=Assembly.GetExecutingAssembly();

49

50stringctfFilePath=assembly.Location;

51

52intlastDelimiter=ctfFilePath.LastlndexOf(@/z\z,);

53

54ctfFilePath=ctfFilePath.Remove(lastDelimiter,

(ctfFilePath.Length-lastDelimiter));

55

56stringctfFileName="PlotTest.ctf〃;

57

58StreamembeddedCtfStream=null;

59

60String[]resourceStrings=

assembly.GetManifestResourceNames();

61

62foreach(StringnameinresourceStrings)

63(

64if(name.Contains(ctfFileName))

65(

66embeddedCtfStream=

assembly.GetManifestResourceStream(name);

67break;

68)

69)

70mcr=newMWMCR(〃〃,

71ctfFilePath,embeddedCtfStream,true);

72)

73else

74{

75thrownewApplicationException(/?MWArrayassemblycouldnot

beinitialized");

76)

77)

78

79

80///<summary>

81///ConstructsanewinstanceoftheTestDemoclass.

82III</summary>

83publicTestDemo()

84{

85)

86

87

88ttendregionConstructors

89

90ttregionFinalize

91

92///<summaryinternal=

93///ClassdestructorcalledbytheCLRgarbagecollector.

94///</summary>

95~TestDemo()

96{

97Dispose(false);

98}

99

100

101III<summary>

102///Freesthenativeresourcesassociatedwiththisobject

103///</summary>

104publicvoidDispose()

105(

106Dispose(true);

107

108GC.SuppressFinalize(this);

109)

110

111

112III<summaryinternal=〃true〃>

113IIIInternaldisposefunction

114III</summary>

115protectedvirtualvoidDispose(booldisposing)

116(

117if(Idisposed)

118(

119disposed=true;

120

121if(disposing)

122(

123//Freemanagedresources;

124)

125

126//Freenativeresources

127)

128)

129

130

131#endregionFinalize

132

133ttregionMethods

134

135///<summary>

136IIIProvidesavoidoutput,0-inputMWArrayinterfacetothe

PlotTestM-function.

137III</summary>

138///<remarks>

139IIIM-Documentation:

140III編寫一個簡單的函數(shù),對plot進(jìn)行簡單封裝一下

141III</remarks>

142III

143publicvoidPlotTest()

144{

145mcr.EvaluateFunction(0,"PlotTest”,newMWArray[]{});

146)

147

148

149III<summary>

150///Providesavoidoutput,l-inputMWArrayinterfacetothe

PlotTestM-function.

151III</summary>

152III<remarks>

153///M-Documentation:

154III編寫一個簡單的函數(shù),對plot進(jìn)行簡單封裝一下

155///</remarks>

156III<paramname=//n//>Inputargument#K/param>

157III

158publicvoidPlotTest(MWArrayn)

159{

160mcr.EvaluateFunction(0,"PlotTest”,n);

161)

162

163

164III<summary>

165IIIProvidesthestandard0-inputMWArrayinterfacetothe

PlotTestM-function.

166III</summary>

167III<remarks>

168///M-Documentation:

169HI編寫一個簡單的函數(shù),對plot進(jìn)行簡單封裝一下

170///〈/remarks〉

171III<paramname=",numArgsOut/z>Thenumberofoutputargumentsto

return.</param>

172III<returns>AnArrayoflength"numArgsOut"containingthe

output

173///arguments.</returns>

174///

175publicMWArray[]PlotTest(intnumArgsOut)

176(

177returnmcr.EvaluateFunction(numArgsOut,“PlotTest”,new

MWArray[]{});

178)

179

180

181III<summary>

182IIIProvidesthestandard1-inputMWArrayinterfacetothe

PlotTestM-function.

183///</summary>

184///<remarks>

185///M-Documentation:

186///編寫一個簡單的函數(shù),對plot進(jìn)行簡單封裝一下

187III</remarks>

188///<paramname=,znumArgs0utz/>Thenumberofoutputargumentsto

return.</param>

189///<paramname=z/n,z>Inputargument#l</param>

190///<returns>AnArrayoflength"numArgsOut"containingthe

output

191IIIarguments.</returns>

192l/l

193publicMWArray[]PlotTest(intnumArgsOut,MWArrayn)

194(

195returnmcr.EvaluateFunction(numArgsOut,“PlotTest”,n);

196)

197

198

199

200III<summary>

201IIIThismethodwillcauseaMATLABfigurewindowtobehaveas

amodaldialogbox.

202///Themethodwillnotreturnuntilallthefigurewindows

associatedwiththis

203IIIcomponenthavebeenclosed.

204///</summary>

205III<remarks>

206///Anapplicationshouldonlycallthismethodwhenrequiredto

keepthe

207IIIMATLABfigurewindowfromdisappearing.Othertechniques,

suchascalling

208IIIConsole.ReadLine()fromtheapplicationshouldbeconsidered

where

209///possible.</remarks>

210///

211publicvoidWaitForFiguresToDie()

212(

213mcr.WaitForFiguresToDie();

214)

215

216

217

218ttendregionMethods

219

220ttregionClassMembers

221

privatestaticMWMCRmcr=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論