I'm trying to call the GetInterfaceInfo Windows API - it accepts a structure as one of its parameters and this structure has a member that is an array. The API populates the contents of the array when it is called and there can be any number of items in the array. How can I define such an array in my structure?
If I just use a normal .NET array like so then the program just crashes (no exception thrown)
<StructLayoutAttribute(LayoutKind.Sequential)> _
Public Structure IP_INTERFACE_INFO
Public NumAdapters As Integer
[Code]...
and this works fine, but the problem is I have to define the SizeConst attribute as you can see to something large (64 in this example) so that the API doesnt fail because the array wasnt big enough. Firstly this is a waste of memory as in most cases the number of items the API sticks in the array will be less than 10, but secondly if there was ever a case where the API wanted to put more than 64 items in then it would fail.
Using ReDim to set the length of the array at runtime seems to have no effect, and that SizeConst attribute has to be set to a constant value so there's no way I can dynamically set it.
I have a problem when debugging a code. On top of class I declare an array, and the length of array is an integer variable which is applied value below declaration of array.
E.g. class declaration Dim array1 (2, integer) as string Public Sub integer = 5 End Sub
So basically, array is created with integer being 0 or whatever, because it is declared before integer was assigned a value. But the problem is, I need it to be declared at class variable so I can use array in different subs.
I didn't think it fair to post a comment on Fredrik Mörk's answer in this 2 year old post, so I thought I'd just ask it as a new question instead..NB: This is not a critiscm of the answer in any way, I'm simply trying to understand this all before delving into memory management / the marshal class.
In that answer, the function GetByteArray allocates memory to each object within the given array, within a loop.Would the GetByteArray function on the aforementioned post have benefited at all from allocating memory for the total size of the provided array:
Dim arrayBufferPtr = Marshal.AllocHGlobal(Marshal.SizeOf(<arrayElement>) * <array>.Count)
I just wonder if allocating the memory, as shown in the answer, causes any kind of fragmentation? Assuming there may be fragmentation, would there be much of an impact to be concerned with? Would allocating the memory in the way I've shown force you to call IntPtr.ToInt## to obtain pointer offsets from the overall allocation pointer, and therefore force you to check the underlying architecture to ensure the correct method is used*1 or is there a better way? (ToInt32/ToInt64 depending on x86/64?)
*1 I read elsewhere that calling the wrong IntPtr.ToInt## will cause overflow exceptions. What I mean by that statement is would I use:
Dim anOffsetPtr As New IntPtr(arrayBufferPtr.ToInt## + (loopIndex * <arrayElementSize>))
I've read through a few articles on the VB.Net Marshal class and memory allocation; listed below, but if you know fo any other good articles I'm all ears![URL]..
given the following Sub, how would I initialize byte array 'temp'to zeros and give it the length of the incoming byte array passed into the subroutine?
Sub ReceivePacket(ByVal buffer As Byte()) Dim temp() As Byte 'initialize to zeros and length of buffer temp = buffer.Skip(17).ToArray() End Sub
I am working on a code that should capture the color of a pixel in a bitmap and then check if the 8 surrounding pixels have the same color. If the checked surrounding pixel HAS NOT the same color it will be ignored, otherwise if it HAS the same color, it should check for its own 8 surrounding pixels and so on.
To do that, I have created an array that starts with a single entry (the x,y coordinates of the initial pixel). So, when a pixel with the same color is found it is pushed to the end of the array. I used a for each loop supposing that VB would keep looping until the end of my array - and since it is growing, the last position of the array would be always pushed until I have not more pixels to be checked.
The problem is that VB is not respecting it, and is considering my array as if it had just 1 entry. Seems that it catch the size of the array when it enters the loop, and regardless the fact I have pushed new items to the array it doesnt keep looping it.
How can I force VB to update the end of array position while looping it? Although I think it wouldnt be necessary, here it goes the code I have so far...
This adds 1 and 2 to list. My question is why does the first element in the 2d array determines the length of an array and if we want to get the length 2nd index then what will be the method for that?
I have an integer that is storing the result of a division between two numbers. I usually receive an result that looks like 5,2496874654. How can I limit the variable length so it looks more 'approximated', like 5,25?
Me and my coworker were discussing variable names today because we both have completely different naming conventions...but we were wondering is the a limit on the length of the variable name??? is it posible to do this: dim
ItsPeanutButterJellyTimePeanutButterJellyTimePeanutButterJellyPeanutButterJellyPeanutButterJellyWithABaseBallBatPeanutButterJellyPeanutButterJellyPeanutButterJellyWithABaseBallBat as string = "lol"
I need to truncate to sertain amount of decimals for example : dim x as double;x= 6.98455 textbox1.text = x that mean textbox1.text= 6.98455 I need textbox1.text= 6.99
Is it possible to have a 2 dimensional array of a type struct such that the size of the last dimension can vary by element of the first?eg:-structure mydatadim param1 as integerdim param2 as byteend structuredim main_array(100,10) as mydataThen at anytime change the size of the last dimension like...redim main_array(10, 5)redim main_array(15,7)leaving all other array entrys' last dimension unchanged and independent??VB2005 starter
I try to determine the lenght of a string variable, but get the wrong outcome when using: testje = Len(testSTR). When I insert the following line of code: testje = testSTR.Length the answer is still wrong but when I click "Length" I see the correct value. How to get at that value, so I can use it?
I am wanting to create 2 tables called Stores and Locations. Locations is a table containing a unique location_code and a location. Stores is a table containing a unique store_code a store name and a variable number of location_code's and a relationship is set up between the 2 tables.
creating the Stores table in particular the location_ code. Can rows in a table have differing numbers of columns? as a particular store type could be in many diferent locations. I feel it should be possible to set up some sort of array of Location_code's in the Stores table.
Structure MyInformation <VBFixedString(4),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=4)> Public ReturnStatus As String
Using VB or C#, I am getting a string of variable length from the database. This information is sensitive information that only certain users will be able to see.I have two cases that will use the same logic (I think).scenario 1: replace all characters with xscenario 2: replace all characters with x except the last 4 characters (assume length > 4 - this check is being done).I thought that this would be easiest using Regex.Replace(input, pattern, replacestring). As opposed to a lot of string handling with substrings and forcing a length of 'x's.
While using the Socket.Receive method to receive messages through network, you should define a variable as the buffer and you have to specify the length like this: Code: Dim _ReadBuffer As Byte() = New Byte(LENGTH) {} My question is: What is the bad thing about increasing the length of this variable even if the received messages are sometimes shorter? (i.e. if some body let it 10000).
I have an existing vb.net application which uses a home grown database. The database has over 60,000 unique multi-field records in it.The user can search in each field using drill-down to find a record, and then can add that record to a separate database.(60,000 collectibles described in a master database. User can drill down by category, manufacturer, year produced, etc. to find a record and then add it to their own 'collection', 'wanted', 'have for sale', or 'spares' database for record keeping.)
Instead of having them drill down, I would like for them to be able to perform a search and have all of the results (any amount of matches from 1 to 60,000+) appear on a scrolling form with a checkbox next to each so that they can simply check any that they want and do a mass add to their list databases.
The part I cannot figure out is how to have vb.net (2008) create a variable length scrolling form with the results, and how to identify the checkboxes (generated by the system for search matches) to see which, if any, have been checked by the user.
i am writing a program "serial over TCP/ip " every thing is fine but my problem is that when a data received from a client i get "System. ArgumentException:Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection." what i realy want is to write 9 bytes from the clint received data to the serial port then read 19 bytes from the serial port to send to the client even if this error ocures the program still works fine and the interface between the serial port over the network also works fine, but i don't want this msg to view that the my code .[code]
The obvious first thought is: Public Function CheckStrings(ByVal input As String()) As Boolean For Each s As String In input If s.Length > 0 Then Return True Next Return False End Function I'm sure there is a simpler way than that though. At least simpler in terms of the code if not necessarily the performance.
Here's my final code: <Extension()> _ Public Function AnyNonZero(ByVal value As String()) As Boolean If Not value.All(Function(x) String.IsNullOrEmpty(x)) Then Return True Return False End Function
I have an array in my application and I don't know how many values there will be in the array because it gets the data from a webpage. Filling the array with information from the webpage works except for the length, it always returns 999. This is my dim Array() as string Array = GBA(source, "<b>", "</b>") Count = Ubound(Array) How can I find out the length of my array?