我有一個名爲OPIMG(2000,2000,10)的多維數組,它包含多組圖像數據(16位灰度圖像作爲數據使用在用戶控制中),我在主窗體上創建。我需要能夠從活動X中訪問這些數據,但無法將數組放入控件中。VB如何將多維數組傳遞給ActiveX控件
我試圖在控件內創建一個新的數組,並通過值複製數據,但這花了太多時間,所以我需要找到一種方法,可以直接從用戶控件訪問公共數組。
我有一個名爲OPIMG(2000,2000,10)的多維數組,它包含多組圖像數據(16位灰度圖像作爲數據使用在用戶控制中),我在主窗體上創建。我需要能夠從活動X中訪問這些數據,但無法將數組放入控件中。VB如何將多維數組傳遞給ActiveX控件
我試圖在控件內創建一個新的數組,並通過值複製數據,但這花了太多時間,所以我需要找到一種方法,可以直接從用戶控件訪問公共數組。
我盛諮昂同意這就是它的大量的內存通過了作爲它的作品出來
2000 x 2000 x 10 = 40,000,000
Approximately 40Mb
可是偏偏,回答你的問題,我已經貼了頁面和用戶代碼控制。
PAGE CODE
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Register Src="~/MyUserControl.ascx" TagName="MyUserCtrlItem" TagPrefix="UC1" %>
<script runat="server">
Private _MyArray(,,) As Long
'
Protected Sub Page_Load(sender As Object, e As System.EventArgs)
'
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
Dim Number As Long
'
' Populate array with test data
ReDim _MyArray(2000, 2000, 10)
For Z = 0 To 9
For Y = 0 To 199
For X = 0 To 199
Number = Number + 1
_MyArray(X, Y, Z) = Number
Next
Next
Next
MyUserCtrlItem1.MyCtrlArray = _MyArray
'
End Sub
'
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<UC1:MyUserCtrlItem ID="MyUserCtrlItem1" runat="server" />
</form>
</body>
</html>
和用戶控制
USER CONTROL
<%@ Control Language="VB" ClassName="MyUserControl" %>
<script runat="server">
Private _MyCtrlArray(,,) As Long
Property MyCtrlArray As Array
Get
Return _MyCtrlArray
End Get
Set(value As Array)
_MyCtrlArray = value
End Set
End Property
Protected Sub Button1_Click(sender As Object, e As System.EventArgs)
If TextBox1.Text <> "" Then
If TextBox2.Text <> "" Then
If TextBox3.Text <> "" Then
Label1.Text = _MyCtrlArray(CInt(TextBox1.Text), CInt(TextBox2.Text), CInt(TextBox3.Text))
Else
Label1.Text = "Z value missing/invalid!"
End If
Else
Label1.Text = "Y value missing/invalid!"
End If
Else
Label1.Text = "X value missing/invalid!"
End If
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
End Sub
</script>
<!-- HTML -->
X Value: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
Y Value: <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
Z Value: <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /><br />
Data: <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br /><br />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
在代碼示例代碼,你XY和Z輸入一個值,它會返回NUMBER的該元素保存的值(我只是在頁面加載事件中遞增)
非常感謝你們,這似乎很好。但我沒有想到內存使用情況。就像事後想到的那樣,我認爲找到陣列的內存起始地址並將該信息發送給活動的X控件會更快,更高效。兩者都是用VB自己寫的,所以我可以操縱數據不過我想要。但後來林不知道如何將數組指向該地址。想一想我在這裏,但它需要做的 – 2013-05-02 07:44:01
您是否編寫了ActiveX控件?這聽起來像你有源代碼...如果是的話,寫入的ActiveX控件是什麼語言? – 2013-05-01 18:20:42
這聽起來有很多內存來回傳遞。如果你可以重寫代碼來傳遞像IEnumVARIANT這樣的迭代器,那麼內存佔用可能會小很多。 – 2013-05-01 22:14:09