VS 2010 - Convert Function From C# To VB - GetHashCode 64 Vs 32
Mar 30, 2012
I have a very old app that uses a little function that calculates a value and after that i get the hash code of that value, that it's used as a password to unlock some functionalities to the user. Now the manager has a 64 bits computer and the function returns a different value. What i need it's how to convert this function from C# to Vb, i know that I can use the converts, but they don't work, pointers. Code: Can I convert this function?
I am trying to convert a DLL function call which has the Callback function routine called within the DLL function call.The DLL function call signature is like this:
I have a theoretical class Name_Order, that has a string Name and a int Order. I need to indicate that two Name_Order's are different, if the pair NameOrder is different, that is, or name or order are different. Now, overriding Equals no problemo, but I have some "issues" with GetHashCode:
So I'm trying to figure out how to correctly override GetHashCode() in VB for a large number of custom objects. A bit of searching leads me to this wonderful answer.Except there's one problem: VB lacks both the checked and unchecked keyword in .NET 4.0. As far as I can tell, anyways. So using Jon Skeet's implementation, I tried creating such an override on a rather simple class that has three main members: Name As String, Value As Int32, and [Type] As System.Type. Thus I come up with:
Public Overrides Function GetHashCode() As Int32 Dim hash As Int32 = 17
[code]....
Problem: Int32 is too small for even a simple object such as this. The particular instance I tested has "Name" as a simple 5-character string, and that hash alone was close enough to Int32's upper limit, that when it tried to calc the second field of the hash (Value), it overflowed. Because I can't find a VB equivalent for granular checked/unchecked support, I can't work around this.
I also do not want to remove Integer overflow checks across the entire project. This thing is maybe....40% complete (I made that up, TBH), and I have a lot more code to write, so I need these overflow checks in place for quite some time.
What would be the "safe" version of Jon's GetHashCode version for VB and Int32? Or, does .NET 4.0 have checked/unchecked in it somewhere that I'm not finding very easily on MSDN?
EDIT:Per the linked SO question, one of the unloved answers at the very bottom provided a quasi-solution. I say quasi because it feels like it's....cheating. Beggars can't be choosers, though, right?
Translated from from C# into a more readable VB and aligned to the object described above (Name, Value, Type), we get:
Public Overrides Function GetHashCode() As Int32 Return New With { _ Key .A = _Name, _
[code]....
This triggers the compiler apparently to "cheat" by generating an anonymous type, which it then compiles outside of the project namespace, presumably with integer overflow checks disabled, and allows the math to take place and simply wrap around when it overflows. It also seems to involve box opcodes, which I know to be performance hits. No unboxing, though.
But this raises an interesting question. Countless times, I've seen it stated here and elsewhere that both VB and C# generate the same IL code. This is clearly not the case 100% of the time...Like the use of C#'s unchecked keyword simply causes a different opcode to get emitted. So why do I continue to see the assumption that both produce the exact same IL keep getting repeated? </rhetorical-question>
Anyways, I'd rather find a solution that can be implemented within each object module. Having to create Anonymous Types for every single one of my objects is going to look messy from an ILDASM perspective. I'm not kidding when I say I have a lot of classes implemented in my project.My final implementation, which fits the constraints of GetHashCode, while still being fast and unique enough for VB is below, derived from the "Rotating Hash" example on this page:
'// The only sane way to do hashing in VB.NET because it lacks the '// checked/unchecked keywords that C# has. Public Const HASH_PRIME1 As Int32 = 4
[code]....
I also think the "Shift-Add-XOR" hash may also apply, but I haven't tested it.
only code I can find after several hours of searching is a PHP function. Although I can more or less see what's happening, I'm not able to convert everything. The main problem is the "temp_getBytes" function. I don't know how to convert that.I already have the file as a byte array, because it was decrypted, so I'm writing the byte array to a memory stream in order to work with the data. I've added a bunch of question marks where I'm having a problem converting the code.
I'm using a SQL Server database and a bindingsource, and i want to filter a numeric field in order to, for instance, when I write 1, the grid shows all the rows in which that field begins whith 1 (1,10,14...). In order to do this, I have to convert the field to varchar, but VB shows an error message when using cast or convert functions. I have this sentence in my
I have this function that maps a IDataReader to a class. It is obviously written in C#. My co-worker wants to use the same method in his code, but he is writing in VB.net. Basically I am having difficulty rewriting this due to the Lambda expressions used in C#. He is running .Net 3.5.
Where inst is the pointer originally passed to RemoteDllSetReceiver buffer & size contain the notification text as defined in the Remote Protocol. Note: notifications may arrive in different threads (e.g. network, timer, audio).
I can't imagine what i mus do with on_received_buffer_t, must it be a delegate? Like you can read, this functions returns notifications from the DLL like connection status, user id...
I am having a problem with the BackOrdered Function of my program. I can`t get it to say anything but 0 when I run the program. Another problem I am having is the input box pops up like 6 times and it`s only suppose to once. [Code]
I don't really understand what the TWriteFileCommand in parathesis after the equal sign is for in that statement. When I try to do it in VB.NET, I keep getting errors because I can't get a reference to the CreateCommand function. The closest I've gotten is this:
Dim MyAppBase As OPSupport.App.AppBase Dim writeFile As TWriteFileCommand writeFile = MyAppBase.CommunicationLink.CreateCommand(TOPKernel.TCommand.CommandType.WriteFile)
However, I have a green underline after the equal sign @ MyAppBase that flags an error "Variable MyAppBase is used before it has been assigned a value. A null reference exception could result at runtime."What am I missing? Why in the C# code is the instance fine and what do I need to get the equivalent instance in VB.NET?
I am new to vb.net and would like to be able to convert the following code to it's own function - either inside the current module or better yet in a seperate class.This code currently runs in the KEYPRESS event and ensures only numbers, decimal point, 2 decimals etc. are entered and not letters. Works exactly how I want it but would now like it in a function.I need this code in numerous text box controls but I would rather just call it somehow with a function.
I have a function in VBA that I need to convert into VB.net:Sub Crossfunction(ByVal Array1 As Decimal, ByVal Array2 as Decimal) As Boolean
Dim C As Variant Dim Above as boolean Array1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) Array2 = Array(1, 4, 3, 7, 5, 8, 7, 2, 9)
[Code]...
Is this the correct method? And how can I convert the function and not get an error: Error 1 Value of type 'System.Collections.Generic.List(Of Decimal)' cannot be converted to '1-dimensional array of System.Collections.Generic.List(Of Decimal)' when I redefine the Arrays as: ByVal Array1() as List(of Decimal),ByVal Array2() as List(of Decimal).
I have the code below. The code returns a string in (IntersectingPoints) for X and Y. I need X and Y values to be in single and stored in an array to deal with later.[code]...
I have a window that I need to activate and the window name does not work in AppActivate("WindowName") because this does not work with partial captions etc... and the window name will be different depending on user. That being said I am able to use "GetwindowhandlefromPartialCaption" to retrieve the # value of the window name or handle. Is there a way to convert this or extract the name from the handle ID to use with AppActivate?
I have a window that I need to activate and the window name does not work in AppActivate("WindowName") because this does not work with partial captions etc... and the window name will be different depending on user. That being said I am able to use "GetwindowhandlefromPartialCaption" to retrieve the # value of the window name or handle. Is there a way to convert this or extract the name from the handle ID to use with AppActivate?
I am creating a program that will convert Celsius to Fahrenheit and visa versa. The program must use a function to return the answer. I'm using a string function that will return either the temperature in Celsius or Fahrenheit or "Please enter a valid temperature" if anything but a number is entered. TryParse is used to check if the input is valid.
When using the TryParse method in the function I am trying to use a parameter to pass the variable that will store the converted data type value [Code] The line " If Double.TryParse(tempTextBox.Text, scale) Then " is supposed to check if the conversion is possible and if it is pass either F or C as a variable to the scale parameter. It seems to verify the conversion all right but it doesn't actually do the conversion. Why isn't doing the conversion? Both F and C remain 0. I can get it to work by using two more TryParse methods (one in each branch of the If else statement in the function), but I'd rather not do this.
display a Decimal (or double) to elapsed time [h]:mm:ss (hours:minutes:seconds)using vb.net?
example:
if you were to type "1.34666666666667" into a cell in Excel then choose Custom Format [h]:mm:ss The result is an elapsed time of "32:19:12". Using the OADate function only runs on a 24 hour clock so this does not work for longer durations unfortunately...