Can Still Get Safearray And Bitmap STRUCTURES (not Classes) In .NET 2005
Sep 27, 2009
I have tried this question several times, sometimes a little in the face of MS VB teams but with no constructive answers. Perhaps with too much rant. I suspect that VB.NET does not allow me to do what I can easly do in VB5.0. The VB team should easily be able to supply the information I need, but have not yet answered the questions. I want to do a lot of work on very large bitmaps (20 Mp or more; 80Mb or more ARGB) using arrays for access. This I used to do in VB5.0 using the SAFEARRAY and BITMAP STRUCTURES. NOT the corresponding .NET CLASSES. But I now need to use an SDK requiring .NET. However, through lack of wisdom, the VB team dropped 5 critical resources on the move to VB.NET - VarPtr, VarPtrArray, the 2 structures and CopyMemory. The SAFEARRAY CLASS seems to lack a set method for array data and the BITMAP CLASS seems to lack both get and set methods for data. On building a .NET solution using VB.NET, c#.NET and C++.NET projects I could not locate the set and get methods. Interop could not upgrade my VB5.0 to VB2005 - presumably on account of these 5 problems. I was surprised that even C++ suffered too. .NET hurts. So, first off, two critcal simple questions: A) Bearing in mind that much of the .NET is tinsel-wrapped APIs, does a pointer to an array still point to a defining SAFEARRAY STRUCTURE of the original format (NOT of course to a first element of an array). If that is so, I am lucky for I can then fill and use (perhaps) my own SAFEARRAY STRUCTURE by memory manipulation in C++. B) If the same applies to a bitmap pointer I can then perhaps do the same with BITMAP STRUCTURES. If that can be done I can hopefully work in a .NET solution containing C++ (for the pointer and mmory work) and VB2005 (for the rest of the work). I can then 1) in VB define two empty byte-arrays GLOBAL in VB.NET- Pic1() and Pic2(). They do not need to be dimensioned. SAFE FROM GC 2) in VB define two GLOBAL SAFEARRAYS to match the arrays, one with one and another with 2 dims matching the bitmap in size. SAFE FROM GC 3) move ByRef the 4 objects to VC++. STILL SAFE FROM GC, LEFT EXACTLY WHERE THEY WERE. 3) copy the BITMAP data pointers to the data pointers of the SAFEARRAYS. DOES NOT MOVE ANYTHING. 4) copy the addresses of the SAFEARRAYS to the corresponding arrays STILL DOES NOT MOVE ANYTHING, BUT JOB DONE. And then I will be able to process the images in seconds rather than minutes after moving only 4 4-byte numbers. I would welcome alternative sequences, provided they DO NOT involve put and set pixels or array elements on the trivial side and do not involve moving 80Mb of image data between "safe" and "unsafe" memory on the Herculian side. Else, as the Pic() ans Safearrays MUST point somehow to structures, WHAT EXACTLY ARE THEY, AND WHERE? I want to access them. If I can't overcome these 5 silly MS blunders I'll just have to build two uncoupled projects - one in VB5.0 and the other in VB/VC++ .NET. I'm not going to get involved myself with tinsel and gladwrap workarounds.
I know that Structures are value types and classes are reference type, i know that since structures are stored in stack they are faster to use i also understands that structures can not use the Inheritance concept but still in most examples i see i always see that the authors use classes when building something like BBL library, if structures is light-weight compare to classes and i don't need it to be inherited should i use structure instead of class?is there a rule of when to use class and when to use structure ?
I've been programming a custom structure to use in my program for a while now and I am debating whether I should switch over to using a class instead. Reason being is because I've read from a few sources that structures should be kept for simple storage of primitive types. However, I am using my structure to store a few integers and a few custom classes of my own.I haven't noticed any slowdowns or performance issues but I do know that I have to update the actual variables in the structures since they are value types and not reference types.
For the time being I have been using a Structure to store "people" (their name, gender, age, etc...), because I really love to refer to something like Mike.name or Caroline.age, so I could simply put Caroline.age += 1 anywhere in the code and here you go, Caroline is one year older. No more simpler.But because of how inflexible (compared to Classes) Structures appear to be, when I needed to iterate through all the instances I was forced to use a list or dictionary so I could use a FOR EACH ... NEXT block. That was resolved by you people in the previous post, but I'm having the problem that I couldn't use the elements of the list to change the original instance of the Structure proper... I mean, if I code something like this...
For Each thisperson As Person In peoplelist If thisperson.name = person_selected Then 'person_selected is the SelectedItem.ToString of a listbox[code]....
Well, I thought that thisperson.teamleader and Mike.teamleader were going to be equivalent (when the IF statement was true, that is) but that doesn't appear to be the case. So right now I'm really hating Structures...But when I look into Classes... well, they have more flexibility, yes. You could construct a FOR EACH block without any other trick like the "on-top" list, and that it's very useful indeed, but (a big "but" IMHO) I lose that NICE feature that makes possible to write the name of one of them instances like Mike.age or Caroline. kills
I mean, if I wanted to add a year to Mike, well... there is no "Mike" in the first place. A "Mike" string could be a property for the class, but I cannot (or know) magically refer to him with the ease of a Structure, so when I want something so simple as Mike.age +=1 ...well, with a Class I'm simply clueless to how locate him and change ANOTHER property of him.I suppose I am doing something very wrong, because I cannot believe VBasic could force on you those two extreme philosophies...:
Classes = +flexibility -usability ???
Structures = -flexibility +usability ???
What I want to do is SO simple that I cannot believe I need to choose between the two.
I have a structure called 'Scheme' and in my program I want (ideally) an ArrayList of 'Schemes' (so i can add, remove schemes etc.). However, within the 'Scheme' structure, I want to have an ArrayList of 'Item''Item' is another structure. Are there any solutions out there for iterating through these arrays quite easily?
How can I easily add multiple Items to a Scheme and mutliple Schemes to my Scheme array. Code is below. When I try to add Items to a Scheme, I get the 'Object not set to a reference of an object, try the 'New' keyword', but you cannot declare 'New' keywork within a structure.
I've heard bad things about overusing regions but when adding enums to my classes I put them into a #region "Enums" at the end of the class, and do the same with structures and even subclasses.
Is there a better/standard way to go about grouping such elements on classes?
(Note: this is tagged C#/VB but maybe the same situation exists for other languages, like Java)
I am in the process of writing a tool to manage DHCP servers using the DHCP Server API. Its an unmanaged DLL so using it is a PITA at least for me it has been.Currently I am stuck trying to enumerate the IP ranges in a particular IP subnet. I am able to access an array of structures but I have only been able to access the first structure in the array of strucutres.Using this I can sucessfully access the first structure in the array.
Dim element_info_array As DHCP_SUBNET_ELEMENT_INFO_ARRAY Dim element_data_ptr As LPDHCP_SUBNET_ELEMENT_DATA ... element_data_ptr = DirectCast(element_info_array.Elements, LPDHCP_SUBNET_ELEMENT_DATA)
However when I use this to try and loop through them one at a time it does not work. The ptr returns 0 is null.
Dim element_info_array As DHCP_SUBNET_ELEMENT_INFO_ARRAY Dim element_data_ptr As LPDHCP_SUBNET_ELEMENT_DATA For i = 0 To size
[code]....
The sizeof for DHCP_SUBNET_ELEMENT_DATA could be off due incorrectly setting up the union structure for it. I was not sure how it define it so that only the first ElementType and one of the other components is avalible at any given time. It wont even read the first pointer though so that has not even come into play yet.
<StructLayout(LayoutKind.Sequential)> _ Public Structure DHCP_SUBNET_ELEMENT_DATA Public ElementType As DHCP_SUBNET_ELEMENT_TYPE
I have tried to pass a ref to a fixed-size array ((Array)string[6]) and to a List.ToArray(), but it keeps crashing on me. E.g.
Array arr1 = (Array) new string[500]; Array arr2 = (Array) new int[500]; table.GetTableInfo(filename, ref arr1, ref arr2);
To be more specific: I already tried any value for the size (the correct one should be 44). Tried the same for the capacity of a List<>, but that didn't help either. I also tried different types, but it does not accept any other than int.
I don't know why it keeps crashing on me with a general error of that COM component (basically indicating that something is wrong, yet not saying what exactly), since I can confirm that the following VB code works:
Dim TitleList() As String Dim PositionList() As Long Call objTable.GetTableInfo(txTableFile.Text, TitleList, PositionList)
I want to add some text to a photo (held in a bitmap) but rather than write over the photo itself I want to add a small black bar to the bottom of the image and write some white text in it.
e.g. a 640 x 480 photo becomes 640 x 510 with the black bar at the bottom.
I have a bunch of PNG images in my project's resources. I need to find out whether the pixel at any X,Y is transparent or not. Testing the alpha of the color returned by GetPixel doesn't work, and I can't test it against the transparency key because Bitmap objects only have a MakeTransparent method, for some strange reason. Is there a way to tell?
I'm using Bitmap to show picture box like slideshow using Timer. For each timer interval, I've to go for new instance of Bitmap, there System memory increases to 1MB, How to resolve this, 'BG is picture box
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tic Dim img As Bitmap
img = New Bitmap(System.Drawing.Bitmap.FromFile(FileIO.FileSystem.GetFiles
I'm making an application that will be available as both a Windows App and an ASP.Net App. The web app has a much scaled-down version of the functionality of the window app. I want to reference the classes contained with the windows app from my web app. The thing is, my classes in the windows app may have some modifications: if I reference them in my web app, will this pick up the changes made automatically? Also, referencing the project is for development work, when I go to deploy the web app, I will probably need to reference the classes as dll's. So the next questions are: 1. Is this the right way to go about doing this? 2. How do I make the Classes I have into self-contained dll files?
how can i create a monochrome bitmap from a semi transparent bitmap in vb.net? the bmp is for a transparency mask image for an icon i'm trying to create with the CreateIconIndirect API function.
i'm using vb2008 .Net3.5, but i would prefer an answer that would also work in vb2005
I'm using the cryptography classes in .net to encrypt and decrypt files. When I encrypt a txt file, then decrypt in my code it works fine. But when I encrypt an xml file and try to decrypt it within my code I get an error saying "padding is invalid and cannot be removed." I am setting the padding during both the encryption and decryption as:
PaddingMode.PKCS7. Do you think the file being an xml file has something to do with the error that's occuring? Also, should I or should I not be setting the padding for both encryption and decryption?
I read in the Book "Mastering Microsoft Visual Basic 2008" about "User-Defined data types".The example given is creating a Structure as follows.I wanted to check that so I wrote all the code given; I used a TextBox and a Button for this.(I didn't include the "CheckDate" here; that is in the book)
Structure CheckRecord Dim CheckNumber As Integer
[code]....
The problem is this does work.What I get is "00000". and I found out that the "Checks(4)" Array does hold any value ie: on keeping the cursor over that, it shows "CheckAmount 0.0, CheckNumber 0 , CheckPaidTo Nothing ".
I've read that modules are basically shared classes. For a module though, you can call a method directly without prefixing the module name. So I can do this: methodTest("abc", mod1Enum.enum2)But for a class with shared members I have to fully qualify the method call, and in this case fully qualify the enum:[code]In our conversion from VB6 to .NET the need to fully qualify all calls like this might be an argument for us to bring our VB6 modules over as modules instead of converting them to classes.
bare with me here ok I posted on here a while back, like month to 2 months ago about creating an array of data (user inputed data). But was suggested to go the class route. After weeks of lengthly reading came up with a list collection class.
I have written multiple programs in the past that deal with cad data. Points, lines, arcs, etc. For each program I ended up creating slightly different versions of some really base classes like a class that defines a point:
<Serializable()> Public Class Point Public x As Double = 0 Public y As Double = 0 Public z As Double = 0 End Class
My question is how would I use that class in such a way that it could be in a namespace and imported into any future project that I write?
I have a grass image located here in my directory. I want to just create a Bitmap, but I am getting an error. (Parameter is not valid.) Immediate Window: A first chance exception of type 'System.ArgumentException' occurred in System.Drawing.dll
I have two classes, one nested in the other. [code]Neither "Name" or "ID" are unique between operations and records.I wish to construct a dictionary using LINQ = Dictionary(Of String, Of List(Of Integer), whereby the keys are uniqe examples of Names in my collection and the values are the collective set of distinct IDs that are associated with those names.
How can I structure my classes so that the user interfaces though a single class while the supporting classes are hidden from their view? I think its best understood in an example:
Public Class MyInterface Public Economic as EconomicClass Public Sub New() MyBase.New()
[code].....
So you might ask why am I even separating them? It's strictly for others who will be working with this interface. I need to funnel them though a logical structure:
This way everything is already handled for them in the background and they only need to run the method they need. I don't know if I can have it both ways in VB.NET.
I'm attempting to create a list of structures that contains a list of structures. I can't seem to figure out how to properly allocate the object for the inner list of structures. I expect the outer list of structures to have a couple thousand entries and the inner list of structures to be fairly small at 2 to 10. Both lists will grow over time but the number of elements within the inner list will be constant for an instance of the outer list. Meaning, if an instance of the outer list has 2000 entries each of those will have the same number of elements on the inner list, say 4 entries.
Here is a simplified code fragment. This fragment makes no attempt to create the instance of the inner list "StructBlist" since I can't figure out where to put it. Tried "New List(Of StructB)" in the declaration as well as "Alist(0).StructBlist = New List(Of StructB)" but neither works.
Public Class Form1 Structure StructA Dim FieldA1 As Integer
code For Each item As Reflection.FieldInfo In GetType(NameSpace.ClassWithNestedClasses).GetFields rtfAppend(item.Name & ":" & Tab & item.GetValue(Me)) Next For Each item As Reflection.PropertyInfo In GetType(NameSpace.ClassWithNestedClasses).GetProperties()
[code]...
which gets me the simple string vars and properties of my top class, but how can i apply this to loop through all sub classes and get there vars and props?