九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
轉(zhuǎn)帖————關(guān)于怎么做matlab的com組件,被vc調(diào)用的例子
很不錯(cuò)的例子和說(shuō)明。關(guān)于COM組件的用法。可以脫離MATLAB運(yùn)行, 而且速度很快。
http://bbs.matwav.com/post/view?bid=12&id=123111&sty=0&tpg=1&ppg=1&age=30#

本文根據(jù)作者親自在VISUAL C++ 6.0編譯器環(huán)境下,實(shí)現(xiàn)了MATLAB中COM組件的開(kāi)發(fā)而寫(xiě)成。此方法的實(shí)現(xiàn)是在網(wǎng)上各位前輩的基礎(chǔ)上完成的?,F(xiàn)在,就具體談一下怎么把一個(gè)M文件或MEX文件,做成可以脫離MATLAB環(huán)境的COM組件,并且被VC++調(diào)用。

1.  首先,設(shè)置合適的編譯器。在MATLAB命令窗口里敲:mbuild –setup 和 mex –setup,完成編譯器的設(shè)置。

● Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? y

● Select a compiler:
[1] Lcc C version 2.4 in C:\MATLAB7\sys\lcc
[2] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None

Compiler: 2

● Please verify your choices:
Compiler: Microsoft Visual C/C++ 6.0
Location: C:\Program Files\Microsoft Visual Studio
Are these correct?([y]/n): y

● Try to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R14\compopts.bat
From template: C:\MATLAB7\BIN\WIN32\mbuildopts\msvc60compp.bat
Done . . .
--> "C:\MATLAB7\bin\win32\mwregsvr C:\MATLAB7\bin\win32\mwcomutil.dll"
DllRegisterServer in C:\MATLAB7\bin\win32\mwcomutil.dll succeeded
--> "C:\MATLAB7\bin\win32\mwregsvr C:\MATLAB7\bin\win32\mwcommgr.dll"
DllRegisterServer in C:\MATLAB7\bin\win32\mwcommgr.dll succeeded

● Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n? y

● Select a compiler:
[1] Digital Visual Fortran version 6.0 in C:\Program Files\Microsoft Visual Studio
[2] Lcc C version 2.4 in C:\MATLAB7\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
Compiler: 3

● Please verify your choices:
Compiler: Microsoft Visual C/C++ 6.0
Location: C:\Program Files\Microsoft Visual Studio
Are these correct?([y]/n): y

Try to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R14\mexopts.bat
From template: C:\MATLAB7\BIN\WIN32\mexopts\msvc60opts.bat

Done . . .

2.  設(shè)置系統(tǒng)路徑。我的電腦->屬性->高級(jí)->環(huán)境變量->系統(tǒng)變量->
ath選項(xiàng),增加以下路徑:
頭文件:
C:\MATLAB7\extern\include;
庫(kù):
C:\MATLAB7\extern\lib\win32\microsoft\msvc60;
DLL:
C:\MATLAB7\bin\win32

3.  做一個(gè)簡(jiǎn)單的M函數(shù)(只能是函數(shù)不能是文件)。文件名和函數(shù)名一致。運(yùn)行并測(cè)試此文件的正確性。
function plot_test(result)
plot(result); %畫(huà)圖

4.  在命令窗口敲comtool,出現(xiàn)com組件builder。選擇FILE選項(xiàng)->New Project選項(xiàng)。出現(xiàn)以下界面。

Component name選項(xiàng):設(shè)置com組件的名稱,注意不要和上面添加的m文件重名。
  Class name選項(xiàng):設(shè)置類名稱。一般將鼠標(biāo)點(diǎn)擊空白位置,系統(tǒng)會(huì)自動(dòng)生成類名。
Project version選項(xiàng):版本號(hào)。系統(tǒng)默認(rèn)為1.0,將來(lái)要修改或添加其他函數(shù)時(shí),可以修改此選項(xiàng)為2.0,3.0等。
  Project directory選項(xiàng):工程所在目錄。
  Complier options選項(xiàng):編譯器配置選項(xiàng),全部選中。
  最后單擊OK。系統(tǒng)會(huì)出現(xiàn)對(duì)話框,問(wèn)你是否創(chuàng)立工程目錄,你選YES。

5.  單擊Project Files->plotclass->M-files,然后選中comtool菜單Project->Add File選項(xiàng),添加上面寫(xiě)好的plot_test M函數(shù),如下圖:

  當(dāng)然,你可以添加更多的M或MEX函數(shù)。

6.  單擊Build按鈕,選中Com Object選項(xiàng),這時(shí)com-builder會(huì)幫你自動(dòng)編譯連接該組件,生成所需要的頭文件,源文件,接口描述文件,動(dòng)態(tài)連接庫(kù)文件,等等。在右側(cè)Build Status顯示框里給出了編譯的過(guò)程和信息。在菜單Component->Component Info里有關(guān)于接口、類、庫(kù)的信息。在C:\MATLAB7\work\plot文件夾里,出現(xiàn)了兩個(gè)子文件夾,distrib和src,這是我們VC中需要用到的文件、庫(kù)、資源、接口等。在src-> plot_idl_i.c中,有關(guān)于com類和com接口的GUID。其中CLSID(類的GUID)在VC編程中需要用到。

7.  打開(kāi)VC++編譯器,選擇文件->新建->工程->MFC(exe)->命名(plot)->單文檔->完成。我們?cè)谫Y源Toolbar里建立兩個(gè)按鈕,一個(gè)用于啟動(dòng)COM(OLE),獲得接口指針;另一個(gè)用于調(diào)用繪圖(plot_test)命令。用查看->類向?qū)Ыⅲ贑plotView類里建立command消息映射。

8.  再次打開(kāi)類向?qū)?,?Add Class選項(xiàng)內(nèi),選中From a typed library,進(jìn)入C:\MATLAB7\work\plot\src文件夾,選中plot_idl.tlb文件,點(diǎn)擊打開(kāi)?OK。

這時(shí)一個(gè)COM類便加入進(jìn)來(lái)了,查看一下Iplotclass類。里面有些,我們想要的東東。
9.  下面就是OLE調(diào)用的基本方法了,具體可以參見(jiàn)MSDN。
首先在CplotApp類的InitInstance()里添加初始化OLE代碼。
  BOOL suc=AfxOleInit(); // 初始化OLE
  if (suc==FALSE)
  {
    ::AfxMessageBox("初始化OLE失敗!");
  }

其次,在CplotView里包含plot_idl.h,math.h頭文件,并定義常量PI;并從C:\MATLAB7\work\plot\src\plot_idl_i.c中拷貝類的GUID并復(fù)制到PlotView.h文件類定義的上面。
#include "plot_idl.h"
#include "math.h"
#define PI 3.1415926535897

const CLSID CLSID_plotclass = {0xAED07AAF,0x3190,0x4996,{0xAD,0xD6,0x31,0xF9,0x45,0x41,0xB1,0xC5};

再次在構(gòu)造函數(shù)CPlotView()的上面定義類全局對(duì)象;
Iplotclass plot;

然后,OnStart()函數(shù)里添加獲得COM指針的函數(shù),代碼如下:
plot.CreateDispatch(CLSID_plotclass,NULL); //創(chuàng)立接口
COleDispatchDriver(); //連接(此句可以不寫(xiě))

然后,在OnPlot()函數(shù)里添加繪圖代碼,代碼如下,這里關(guān)于VARIANT變量的用法說(shuō)明請(qǐng)參照MSDN。

  const int N=100; //數(shù)組大小
  double a[N]; //數(shù)組定義
  double f=50; //正弦信號(hào)頻率
  double Ts=0.002; //采樣時(shí)間
  
// 賦值
  for (int i=0; i<N; i++)
  {
    a=sin(2*PI*f*i*Ts);
  }

//任意變量
  VARIANT x;
  VariantInit(&x); //初始化
  
  x.vt=VT_ARRAY|VT_R8; //類型(數(shù)組,雙精度型)

  SAFEARRAYBOUND rgsabound[1];
  rgsabound[0].cElements=N; //數(shù)組所含元素?cái)?shù)
  rgsabound[0].lLbound=0;   //數(shù)組上界

  //創(chuàng)立數(shù)組
  x.parray=SafeArrayCreate(VT_R8,1,rgsabound); //創(chuàng)立一維數(shù)組

  //鎖定數(shù)組
  SafeArrayLock(x.parray);

  //數(shù)組傳遞數(shù)據(jù)
  x.parray->pvData=a;
  

  //調(diào)用方法
  plot.plot_test(x);

  //解鎖
  SafeArrayUnlock(x.parray);

最后,在析構(gòu)函數(shù)~CPlotView()里添加釋放接口和資源的代碼。
  plot.DetachDispatch();

10.  測(cè)試。先按綠色按鈕,初始化OLE和接口,再按紅色按鈕繪圖。注意,開(kāi)始綠色按扭,比較慢,因?yàn)橐d入很多DLL,后面紅色按鈕就快多了,并且第二次執(zhí)行會(huì)更快?,F(xiàn)在是不是感到很爽呢?別急,還有最后一步打包發(fā)布。還要注意的是,最好再做個(gè)程序,防止多次按下綠色按扭,否則會(huì)有錯(cuò)誤。當(dāng)關(guān)閉窗口時(shí),所有載入的資源會(huì)自動(dòng)釋放。

11.  打包。再次打開(kāi),原來(lái)的工程文件*.cbl,注意在前面過(guò)程中一定要保存。(matlab會(huì)有提示)。然后選擇Component->
ackage Component,系統(tǒng)就會(huì)自己幫你打包了。出現(xiàn)如下圖,選中Include MCR,點(diǎn)擊Create選項(xiàng)。慢慢等吧。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MATLAB中怎樣設(shè)置plot函數(shù)的縱橫軸范圍
5分鐘入門matlab
matcom和VS?C++混合編程方法
Matlab生成Com組件,vb、vc等的調(diào)用! - flider的日志 - 網(wǎng)易博客
淺析VC與Matlab聯(lián)合編程<三> - VC知識(shí)庫(kù)文章
Matlab入門基礎(chǔ)詳解
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服