|
eVB is closer to VBScript and only supports type VARIANT.
It also doesn't support a slew of other VB stuff found in the desktop version.
Compiled to p-code. Interpreted.
Moving over to VB.Net would be a better choice.
"It's true that hard work never killed anyone. But I figure, why take the chance." - Ronald Reagan
That's what machines are for.
Got a problem?
Sleep on it.
|
|
|
|
|
Which version of VB for CE?
"It's true that hard work never killed anyone. But I figure, why take the chance." - Ronald Reagan
That's what machines are for.
Got a problem?
Sleep on it.
|
|
|
|
|
VB 2008 for Windows CE ver. 5.0
|
|
|
|
|
I know, I admit this is a jerk question about VB6.
Anyway, I have a Siemens card reader and they provide an SDK which includes an OCX you use to communicate with it. Until I can get the essential communication request/replies working I'm avoiding using Dotnet so as not to have to worry about the interop malarkey for now. I installed VB6 with the idea it gets me right in bed with the OCX. I'm sure you can understand my reasons for doing so in the first-wave of testing.
Anyway, many of the documented methods contain sample prototypes and one I'm dealing with is like this:
void SetData(LONG pinginterval, LPCTSTR key, LPCTSTR user, LPCTSTR unc, LONG port)
The arguments I'd like to clarify are the LPCTSTR. When I use the conventional data types I can't connect to the device. This might be because it can't make sense of what I'm passing in or there might be another problem in the protocol I need to look into. So, if I declare say, key, like this:
Dim key As String
key = "fred"
Is this usage of key compatible with LPCTSTR key in the documentation?
I've tried key = "fred" & Chr(0) to use it as a sort of null terminated string but nothing I've tried seems to work. I'm not a VB6 developer so I've more or less run out of ideas. If anyone can offer any help it's be much appreciated.
Many thanks.
If there is one thing more dangerous than getting between a bear and her cubs it's getting between my wife and her chocolate.
|
|
|
|
|
PHS241 wrote: I'm avoiding using Dotnet so as not to have to worry about the interop malarkey for now
..and what are you doing now? Interopping from VB6.
Open the .NET IDE, create a Forms-project. Choose "Add reference". Select the "COM" tab. Double-click on the library.
Every time VB6 is mentioned, God kills a kitten. And a puppy.
|
|
|
|
|
Eddy, it's been a long day. I've no problem adding a reference to VS. The Siemens documentation doesn't say it can't be used in VS but neither do they it has. Elsewhere, they say it's been used in VBA, Excel, Delphi. I saw VBA and connected that to meaning the same as VB6 so I thought I might stand a better chance if I got as close to the coalface as I can. I have the control on a form. VB6 (like VS) lists the methods I can use and they're the same in both. I sort of come back to the original question and it's not about using it but trying to eliminate the possibility of using the wrong parameters. They even list some VB code which I've copied verbatim requiring only a change to the IP and port values. The connection to the device still doesn't work. Siemens' Entro program connects fine but we don't have the source for that. They provided a C++ test program which unfortunately doesn't compile in VS 2010/2012 so I can't see what that does.
I feel that if I'm correctly using the right parameter formats I will at least be getting closer. There's no problem pinging the device so I know the network connection is working and Wireshark proves it's capable of doing something.
If there is one thing more dangerous than getting between a bear and her cubs it's getting between my wife and her chocolate.
|
|
|
|
|
PHS241 wrote: Elsewhere, they say it's been used in VBA, Excel, Delphi.
VBA isn't quite the same as VB6, but manipulating COM-objects would be done in a similar way.
PHS241 wrote: They even list some VB code
Cool; are they using normal strings in the examples?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
They show two small snippets which I've tried using the same types but still it won't really do anything. For example, I set their values to totally useless settings but the OCX reported the connection was successful but the connection status method said it wasn't connected. I believe the latter because asking the device for some information returns false. That's why I was wondering about the legality of the data types I've tried using. I'd like to think that because they show some sample code that it must have worked sometime when they were testing and documenting it. Then again, they might have dropped in something that looks like it might have worked but possibly never did. Yes, the data types do look like standard VB6 vanilla types.
My other approach is to go back to VS and write the protocol (try to) using pure protocol as it were in a TCP/IP socket. As I mentioned though, they don't tell you what to do with the encryption which is something I believe the OCX implements under-the-hood. I'm home now and I've managed to configure my Win7 on my iMac so I can at least ping the device. I don't know enough about Wireshark to see if it's possible to capture just the IP address I'm using instead of everything else under the sun!
I'm sure I'll get there eventually but without access to a Siemens contact or a support group specialising in this device it's going to be a long weekend!
If there is one thing more dangerous than getting between a bear and her cubs it's getting between my wife and her chocolate.
|
|
|
|
|
As Dave said, the Interop is easier from .NET; I'll agree on that with him.
Give http://www.pinvoker.com/[^] a test-run, together with VB.NET.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
LPCTSTR is only relevant in the source code of a C/C++ program. It equates to either LPCWSTR or LPCSTR depending on whether UNICODE is defined or not (set in the General tab of project properties). So you need to contact the originators of the code to find out whether they built it for Unicode or not.
Use the best guess
|
|
|
|
|
Richard, I spent a long time on the phone to Siemens in the UK. After many attempts I managed to home in on a building that knows what I want to do but not being involved in SDKs the best they could say is they'll pass my details to an SDK group in Germany. So, you can see the problem dealing with a huge company where people have heard but don't know who from or where to go. The SDK provides a DLL which they say can only be used in C++. The OCX is intended for everything else. Unfortunately, it's a poorly documented manual. I mean it's good that they describe the protocol but there are too many loose ends of which the method declarations is but one.
Another thing I don't know is do I need to append a \0 to the strings or does VB6 do that automatically? To make it even more frustrating, I've looked at just about every online reference to BAPSI (Siemens' protocol) and I can't find a single documented sample program which might help. So, I might be guilty of passing in parameters which are not compatible and which the device can only throw away as unusable/unrecognisable.
If there is one thing more dangerous than getting between a bear and her cubs it's getting between my wife and her chocolate.
|
|
|
|
|
That really is very poor from their side. The only other suggestions I can offer are to look at Dependency Walker[^], a tool for showing all the public elements of a DLL, and this MSDN page[^] on decorated names. These two together may be able to help you figure out what the actual SDK calls should be.
Use the best guess
|
|
|
|
|
Internally, VB6 uses BSTR to represent a string. This is a structure consisting of:
1) an integer denoting string length without the terminating character,
2) the Unicode string data (usually 2 bytes per character),
3) a termination code, which is 2 bytes of 00.
As far as what a LPCTSTR is, well, it depends on how the original C code was compiled. If the compile-time constant UNICODE was defined, LPCTSTR maps to the LPCWSTR type, otherwide, it maps to LPCSTR.
LPCTSTR means a Long Pointer to a Constant TCHAR String.
TCHAR is another stringe little bugger that maps to either wchar_t (UNICODE) or char (ANSI) depending on if UNICODE is defined or not.
Oh screw it. It's a huge pile of crap to understand. Just read this[^].
By the way, it's actually EASIER to do Interop from C#/VB.NET than it is from VB6 because you have FAR greater control over how things get marshaled back and forth.
|
|
|
|
|
Thanks Dave. I'll read the link you provided.
If there is one thing more dangerous than getting between a bear and her cubs it's getting between my wife and her chocolate.
|
|
|
|
|
I am trying to write into registry using the command
RegKey = Registry.CurrentUser.CreateSubKey("Software\\macson")
Now when I run the program only then it correctly writes into the HKEY_CURRENT_USER\\MICROSOFT\\SOFTWARE. But when I include this program as an assembly in the setup it writes into the HKEY_USERS with no entry in HKEY_CURRENT_USER. Now my problem is that the program which is supposed to access the registry data is programmed to read from HKEY_CURRENT_USER using the command
MyRegKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\macson", True)
Though I have idea that HKEY_CURRENT_USER is a limited copy of HKEY_USERS but since the data is not available in current user my program is failing.
Can anybody help me out on how to solve this issue?
|
|
|
|
|
SPSandy wrote: But when I include this program as an assembly in the setup it writes into the HKEY_USERS with no entry in HKEY_CURRENT_USER.
A regular executable, or a Windows Service? What's the name of the user that the code is running under?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
A regular Executable. The user is the same as is logged in to windows. To be honest could not understand the second part. So sorry if the answer is not to the mark.
|
|
|
|
|
SPSandy wrote: To be honest could not understand the second part.
My bad, I wanted to know whose credentials/useraccount the application was running under; there's a Username[^] in the environment-class that you can use to log it when the application starts.
Did the setup run as a user or as an administrator?
SPSandy wrote: But when I include this program as an assembly in the setup it writes
Are you executing it from the installer (during installation)? Or is the regkey written when the app launches the first time?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Thanks a lot for your response. I have got the reason. Thanks for the tips. It is because though the user has administrative Privileges but still I think the Setup needs to be run as Administrator. Once I did this, it has now written inot HKEY_Current_User.
Thanks for the hint.
|
|
|
|
|
You're welcome
|
|
|
|
|
is there any body that have code of this algorithm in vb.net
it's be very good.
|
|
|
|
|
d3ad-d3vil wrote: is there any body that have code of this algorithm in vb.net If someone has that specialized algo, then there's little chance that they'll simply dump the code here. I suggest you go to wikipedia and try to implement it on your own.
FWIW, the only string-search algo that I translated was "Boyer Moore". It has some example-implementations that you can Google for, might be an alternative to your problem.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
|
|
I need to receive message WM_COPYDATA in VB application for Windows CE. How to do it in System.Windows.Forms.Form?
|
|
|
|