|
Thanks that works. One little question, I have seen a few balloon tooltips that are floating out there, how do they make it where all you have to do is write your string and wrap the word or words that you want to be a link with their tag (similar to html). Just wondering.
Thank you,
Mark
Mark Thibodeaux
|
|
|
|
|
The standard tooltip control can't display links in it.
You may have to use a 3rd party control or make your own.
|
|
|
|
|
I am responsible for a c++ dll that can be invoked by visual basic. Here is an example c++ prototype for one of the functions:
int __stdcall GetClock(
int device_type,
int address,
char **return_str,
int *return_str_len);
The basic premise here is that the DLL manages a buffer to which it writes text information (like the clock value). When the function is complete, the DLL will have assigned return_str to point to this internal buffer and will also have written the length of the text in the return_str_len parameter.
I am puzzled as to how to do this in visual basic 6. Other people that have been using this DLL have declared the parameter as byref string. The disturbing thing about this is that it appears to work. Any guidance would be appreciated.
Regards,
Jon Trauntvein
|
|
|
|
|
Strings are passed to DLLs a little differently than the other data types in VB6.
Passing a string ByVal (by value) really just passes a pointer to that string. This is how you would normally pass a string in C too, because passing an entire array of characters would be inefficient.
Now, since passing a string ByVal passes a pointer, then logically passing a String ByRef would pass it as a double pointer. So, there you go.
|
|
|
|
|
I still see a problem here. My understanding is that VB uses the BSTR type internally. This type is unicode rather than single byte and, as I understand it, this type also expects the length of the string to precede the pointer. I further believe that VB assumes responsibility for releasing the storage (given that it would be the same as a in/out parameter in COM). None of these semantic rules apply in the case of this DLL and I am obligated to keep the function calls as they are currently defined.
My solution is to change the VB prototypes so that the pointer is passed as a byref long and I have added a new function that VB applications can call that will return the results of the last call as a BSTR object.
|
|
|
|
|
Yes, a VB string is a BSTR. It keeps a count of chars instead of forcing you to NULL terminate your strings. But doing a "ByVal myString" only sends the pointer to the character buffer and not the BSTR itself. Otherwise you would have a difficult time making calls to the Win32 libraries from VB6, which is a common thing. Just do a search on "VB6 API" and you'll see what I'm talking about. Now, the string that actually gets sent to your DLL will be NULL terminated. Turns out the BSTR does NULL terminate its string buffer internally (at least that's what it looks like).
Take a look at the StrPtr() function. It helps you send a VB6 string pointer to a win32 functions if you want to do this manually. You can use VarPtr() to get a pointer to a variable, such as the BSTR itself.
You might also want to take a look at StrConv() which you'll need to convert your string to/from ASCII, unicode, and MBCS (Multi-byte character system; this one is nasty).
Here's some helpful link. I just learned a couple new things myself here.
http://support.microsoft.com/default.aspx?scid=kb;en-us;199824[^]
http://vb.mvps.org/tips/varptr.asp[^]
http://www.romanpress.com/Articles/Strings_R/Strings.htm[^]
|
|
|
|
|
Hello,
I'm fairly new to scripting in VB and especially using the WMI classes. One of the things I would like to do is get the Hard drive Serial Number. I am trying to use the Win32_PhysicalMedia but in vain. This is my code:
strComputer = "."
Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery( _
"Select * from Win32_PhysicalMedia")
If Err.Number = 0 Then
For Each objItem in colItems
Wscript.Echo "Serial: " & objItem.SerialNumber
Next
Else
MsgBox "The serial number could not be returned."
Err.Clear
End If
I know I'm missing something. Can someone please help me with this? Any help would be appreciated. Thank you!
|
|
|
|
|
What happens? Do you get an error message?
---
b { font-weight: normal; }
|
|
|
|
|
Please keep in mind that not every manufacturer chooses to implement a WMI provider for every piece of hardware. This information may simply not be provided to WMI by the devices drivers.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thank you for your comments. I tried the same code on another machine, and it works on giving me the serial number. I tried to change it so I can also get Model info, however that didnt work. But I found out that by using the win32_DiskDrive, I am able to get the Model info., which works. So its strange that I cannot use the Win32_PhysicalMedia.Model, when the Win32_PhysicalMedia.SerialNumber works fine. Also does it matter if its a SATA drive etc? Thank you once again!!
|
|
|
|
|
There's nothing weird about it. The manufacturers are under no obligation to fill in ANY of this information. So it's not surprising that you don't see it all, let alone any of it.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hello,
I need help with this. Everytime I run my code I get this error message "An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll" at ExecuteNonQuery.
If someone is an SQL and VB.Net guru any help would be appreciated.
Thanks.
cmd.Parameters.Add(param22)<br />
<br />
cmd.CommandText = "EXECUTE AddtnlComments"<br />
con.Open()<br />
cmd.ExecuteNonQuery()<br />
con.Close()
|
|
|
|
|
Show more of the error message. The part you have shown is only telling that an error occured during a database call.
---
b { font-weight: normal; }
|
|
|
|
|
In my code below,
When I go to a new line, it will not let me put the ( ) at the end of Dim ds As New DataSet
I can enter the parenthesis () but it removes them when I go to a new line
Also the dataAdapter.Fill(ds, "progs")
gives me the error
"Declaration expected"
Here is mycode so far:
**************************
**************************
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<system.diagnostics.debuggerstepthrough()> Private Sub InitializeComponent()
End Sub
'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Dim connectionString As String = "workstation id=Dude;packet size=4096;integrated security=SSPI;data source=Dozer;" & _
"persist security info=False;initial catalog=programmersheaven"
Dim conn As New SqlConnection(connectionString)
Dim commandString As String = "SELECT " + _
"artId, title, topic, " + _
"article.authorId as authorId, " + _
"name, lines, dateOfPublishing " + _
"FROM " + _
"article, author " + _
"WHERE " + _
"author.authorId = article.authorId"
Dim dataAdapter As New SqlDataAdapter(commandString, conn)
Dim ds As New DataSet
dataAdapter.Fill(ds, "progs")
|
|
|
|
|
You don't need the paranthesis when there is no parameters, oddly enough.
You can't put code outside a method, only declarations.
---
b { font-weight: normal; }
|
|
|
|
|
I moved my code under sub page_load but it still need not work?
Sorry, I am so very new at this
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
Dim connectionString As String = "workstation id=DOZER;packet size=4096;integrated security=SSPI;data source=Dozer;" & _
"persist security info=False;initial catalog=programmersheaven"
Dim conn As New SqlConnection(connectionString)
Dim commandString As String = "SELECT " + _
"artId, title, topic, " + _
"article.authorId as authorId, " + _
"name, lines, dateOfPublishing " + _
"FROM " + _
"article, author " + _
"WHERE " + _
"author.authorId = article.authorId"
Dim dataAdapter As New SqlDataAdapter(commandString, conn)
Dim ds As New DataSet
dataAdapter.Fill(ds, "prog")
Dim dataTable As DataTable = ds.Tables("prog")
End Sub
|
|
|
|
|
Standard question #1:
What do you mean by "not working"?
Standard question #2:
What error message do you get?
---
b { font-weight: normal; }
|
|
|
|
|
Thanks for replying,
First I have been taking a tutorial from
|
|
|
|
|
The error message "Declaration Expected" means exactly what is says. You have code where only declarations are allowed. I already explained this. As it's a compiler error message, it has nothing what so ever to do with the database. The database doesn't even have to exist for the code to compile.
Of course you are getting a blank page. What else could you get? You load some data from the database, then you don't do anything with it. What could possibly show up on the page?
---
b { font-weight: normal; }
|
|
|
|
|
Thanks again, I am getting closer for a lowly Newbie. I appreciate your getting me closer.
Now I must figure what I am doing wrong to get it to display on the browser. Probably something extremely simple but I don't know what that is.
Thanks for getting me this far. At least I no longer have the "Declaration expected" problem.
I was hoping that the following code would display to the browser:
Dim ds As New DataSet
dataAdapter.Fill(ds, "arthor,article")
Dim dataTable As DataTable = ds.Tables("arthur,article")
|
|
|
|
|
You have to put something on the page for it to show up in the browser. You can for an example put a DataGrid on the page, and use the DataTable as DataSource for the grid.
---
b { font-weight: normal; }
|
|
|
|
|
hi, i'm just a vb.net beginner, and i'm developing a resources monitor which runs as a windows service...
before installing it (using the installutil command in the VS command prompt) i test it as a windows application, and everything works fine...there's a button that, when clicked, performs the things i want to...but when i create the service, i paste the code into a timer.elapsed event, but nothing happens...
the timer is enabled in the onstart method of the service, and then disabled in the onstop method...
also, the service install succesfully on the machine...
below is the code i'm trying to run...
Private Sub Timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer.Elapsed
Dim dirs() As String
Dim directorio As String
Dim arch As String
Dim archs() As String
Dim objarch As FileInfo
Dim tamaño As Long
Dim from As String
Dim para As String
Dim mailbody As String
Dim asunto As String
dirs = Directory.GetDirectories("d:\", "ssa*")
For Each directorio In dirs
archs = Directory.GetFiles(directorio, "*.pst")
For Each arch In archs
objarch = New FileInfo(arch)
If objarch.Length > 1073741824 Then
tamaño = objarch.Length / (1024 * 1024) 'MBytes
mailbody = "El usuario debe limpiar sus Personal Folders!!"
asunto = "Archivo .pst grande"
MsgBox("Enviando mail!!")
enviarmail(from, para, mailbody, asunto) 'method for sending mails
End If
Next
Next
End Sub
p/d: also, if i write any other code instead if this one, it works great...just don't know why is this happening!
|
|
|
|
|
Hi, not that I've ran your code or anything, but I am guessing at least one of your problems is with MsgBox("Enviando mail!!") . I am trying myself to get interface working from service, but noone answered my other post.
There is a property System.ServiceProcess.ServiceType.InteractiveProcess that it says will allow service to interact with desktop (ie have user interface), but, I have no idea how to use this either.
Anyone know ?
|
|
|
|
|
mmm, could be...but, let me know if i understood well..you are saying that the entire code doesn't works because of that? or just that the message box will not work but the rest should?
i think that the msgbox is blocking the rest of the code, now i'll try again and tell you how it goes!
thanks for the support!!!
|
|
|
|
|
Hi,
I still dont have solution, but I found how to use that attribute ServiceType.InteractiveProcess , you have to write it to the registry yourself, I do it in the following installer method:
Private Sub LogWriterInstaller_AfterInstall(ByVal sender As System.Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles LogWriterInstaller.AfterInstall
This is the code I add:
Dim regK As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Services\Service1", True)<br />
If regK Is Nothing Then<br />
Else<br />
regK.SetValue("Type", System.ServiceProcess.ServiceType.InteractiveProcess)<br />
End If<br />
My code does allow me to use System.Windows.Forms.MessageBox.Show however, I cant simply create an instance of my visual form and hit show()
Keep working away, I'm almost outa time and have to find another way to complete my project (Simply showing a dialog on window shutdown and entering some info.)
Brian
|
|
|
|