已測試,源碼如下:

成都地區(qū)優(yōu)秀IDC服務器托管提供商(成都創(chuàng)新互聯公司).為客戶提供專業(yè)的服務器托管,四川各地服務器托管,服務器托管、多線服務器托管.托管咨詢專線:028-86922220
一、Matlab函數代碼
function?x?=?LU5(a,?b)
for?i?=?1?:?length(a)
x(i)?=?a(i)?+?b(i);
end
二、VB.NET?2005?測試代碼
Private?Sub?test()
Dim?st?As?New?QCS_com.QCS_LU5
Dim?a()?As?Double?=?{1,?2,?3,?4}
Dim?b()?As?Double?=?{1,?2,?3,?4}
Dim?x?As?New?Object
st.lu5(1,?x,?a,?b)
Dim?r?As?Double(,)
r?=?CType(x,?Double(,))
End?Sub
三、測試截圖見附圖
補充一下環(huán)境:Matlab6.5?版本,是基于COM調用的。最新版的.net調用沒試驗過。這個是我前一陣子幫同學寫的,他裝的版本是6.5,所以就裝了個6.5的版本,后來因為涉及到小波及擬合,用COM打包調用有些問題,最后還是采用了引擎方式進行處理了。
先說說VC++的編程。首先在VC++中生成Win32 DLL工程。在這個工程中添加幾個函數供VB用戶調用。一個DLL中的函數要想被VB調用,必須滿足兩個條件:一是調用方式為stdcall,另一個是必須是export的。要做到第一條,只須在函數聲明前加上__stdcall關鍵字。如:
short __stdcall sample(short nLen, short *buffer)
要做到第二條,需要在*.def文件中加上如下的幾行:
EXPORTS
sample @1
這里的sample是你要在VB中調用的函數名,@1表示該函數在DLL中的編號,每個函數都不一樣。注意這里的函數名是區(qū)分大小寫的。至于你說的需要傳遞大量數據,可以這樣做,在VB中用一個數組存放數據,然后將該數組的大小和地址傳給VC(至于如何在VB中編程我會在下面介紹)。就象上面的例子,nLen是數組大小,buffer是數組地址,有了這兩條,你可以象使用VC的數組一樣進行處理了。至于輸出圖形,可以生成WMF或BMP格式,讓VB調用。不過,我認為也可以直接輸出到視窗,只要VB將窗口的句柄hWnd和hDC以及視窗的繪圖位置(VB和VC采用的坐標系必須一致才行)傳給VC就行了。而VB的AutoRedraw屬性必須為False,在Paint事件中調用VC的繪圖程序。
再談談VB的編程。VB調用DLL的方法和調用Windows API的方法是一樣的,一般在VB的書中有介紹。對于上面一個例子,先要聲明VC函數:
Declare Function sample Lib "mydll.dll" (ByVal nLen As Integer, buffer As Integer) As Integer
這里mydll.dll是你的dll的名字。你可能已經注意到了兩個參數的聲明有所不同,第一個參數加上了ByVal。規(guī)則是這樣的:如果在VC中某個參數聲明為指針和數組,就不加ByVal,否則都要加上ByVal。在VB中調用這個函數采用這樣的語法:
sample 10, a(0)
這里的a()數組是用來存放數據的,10為數組長度,這里的第二個參數不能是a(),而必須是要傳遞的數據中的第一個。這是VB編程的關鍵。
下面在說幾個可能遇到的問題。一個問題是VB可能報告找不到dll,你可以把dll放到system目錄下,并確保VB的Declare語句正確。另一個問題是VB報告找不到需要的函數,這通常是因為在VC中*.def文件沒設置。第三種情況是VB告訴不能進行轉換,這可能是在VC中沒有加上__stdcall關鍵字,也可能是VB和VC的參數類型不一致,注意在VC中int是4個字節(jié)(相當于VB的Long),而VB的Integer只有2個字節(jié)。必須保證VB和VC的參數個數相同,所占字節(jié)數也一致。最后一個要注意的問題是VC中絕對不能出現數組越界的情況,否則會導致VB程序崩潰。
總的來說,你和你的伙伴需要一些時間來進行協調和摸索,但這種方法絕對可行,也不難掌握。
改次句即可 Dim bLen As Byte = bArrData.Length
為: Dim bLen As long = bArrData.Length
或 Dim bLen As integer = bArrData.Length
要么bArrData(17)里元素不是17。超過了255個。
當然要想錯改重要數據是要權獻的。
當前題目:vb.netdll數組,vb中數組
網站地址:http://chinadenli.net/article7/dsedjoj.html
成都網站建設公司_創(chuàng)新互聯,為您提供軟件開發(fā)、Google、營銷型網站建設、自適應網站、面包屑導航、微信小程序
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯