|
wow..It works Love you so much! Thank you very much!
this problem drives me crazy everyday when I run the project..
It's all fixed now..I'm so happy...^_^...
I will give you a very big hug if you are here...
|
|
|
|
|
Lisana wrote:
Love you so much! Thank you very much!
I will give you a very big hug if you are here...
Wow! That's more praise than I usually get when helping out... I really appreciate it.
"If a man empties his purse into his head, no man can take it away from him, for an investment in knowledge pays the best interest." -- Joseph E. O'Donnell
Can't manage to P/Invoke that Win32 API in .NET? Why not do interop the wiki way!
|
|
|
|
|
Some of you may have read my postings on this recently
http://www.codeproject.com/script/comments/forums.asp?msg=880420&forumid=1646&XtraIDs=1646&searchkw=environment+variable&sd=5%2F7%2F2004&ed=8%2F5%2F2004#xx880420xx
However, I am still having issues.
If I start my windows application and then define some environment variables, then propagate them up to the system level - then I start a commans prompt window for example and use the SET command I can see the new/changed environment variables.
My applciation then loads an unmanaged DLL (written in C which performs a JNI function). The first function call to this attempts to read environment variables that I have set in the my .NET windows application but they do not seem to be inherited.
What appears to happen is that the unmanaged DLL (even though I load it dynamically only just before using its functions) inherits the environment that was available when the .NET windows application first started.
So if I shut down my applicaiton, manually declare environment variables in Windows, run my .NET app again and this time skip over the code that sets the environment variables, the unmanaged DLL functions are able to read the environment variables no problem!
Does this make sense?
I also found reference to this problem here in some archived usenet stuff, but no solution (
http://usenet.best-buy-online.com/Dir8/File985.html
I am not a C programmer and the unmanaged DLL has been written by someone else. Could there be anything in the compilation of the DLL that affects how the environment is inherited. I believe the DLL is written using Visual Studio C++ v6
Unfortunately I HAVE to set the variables in the .NET windows application. Can anyone think of a way around this or does anyone know of an alternative solution?
thanks
|
|
|
|
|
This shouldn't be a problem if your machine is patched up with current service packs.
What does the code look like where you set the environment variables for YOUR application, not the system. A .DLL loaded by your app will not inherit the environment from anywhere. When loaded, the code from the .DLL becomes part of your app's process space and, thereby using the same copy of the enivorment used by your application. You could call it inheriting, but that's not what is really happening.
If your app, or your .DLL loaded by your app, spawns a child process, this child process will inherit the environment from your app.
We need to see the code your using!
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Dave, thanks for your help so far.
First of all I'm using Windows 2000 and have SP4 installed.
The code that I use for setting the environment variables is as per my previous posting...
http://www.codeproject.com/script/comments/forums.asp?msg=880420&forumid=1646&XtraIDs=1646&searchkw=environment+variable&sd=5%2F7%2F2004&ed=8%2F5%2F2004#xx880420xx
This sets the environment variables for the windows system AND then for my application via a call to SetEnvronmentVariableA in kernel32.dll
AFTER all the environment variables have been set I can open a command prompt and see them, or I can use Debug.Print Environ("my_var") in the command window of visual studio and see that they are set
Also AFTER the environment variables are set I then load my unmanaged DLL dynamically using the LoadLibrary function of kernel32.dll
I have scoured the net and seen other people state that the environment that the dynamically loaded DLL inherits will be that set when the .NET application is first loaded, but have not seen any solutions to this if this is true.
However, as mentioned before I have an older version of the unmanaged DLL that seems to pick up the environment variables fine even when only using SetEnvironmentVariableA and not propagating them to the Windows system. This is why I was starting to think there may be something in the way the DLL is compiled. Problem is I can't stick with the older version of the DLL and some new stuff has been added to the current version which I am reliant upon.
|
|
|
|
|
I seem to remember that there was a problem in Windows 2000 with Environment Variables, but I can't remember what. It was fixed in Service Pack 3, I think. That could be why it worked for a previous version and not now. I has nothing to do with how your .DLL was compiled.
The changes you're making in the environment are taking effect in everything else, but I don't think they are taking effect in your application before you load your .DLL. To test this, you'll have to make your app make the changes in the System Environment and broadcast the WM_SETTINGCHANGE message. Make sure the changes took by launching a command prompt and dumping the environment strings with the SET command. The next thing your app has to do is dump all of it's environment settings with the System.Environment class:
Imports System
Imports System.Collections
.
.
.
Dim envVars As IDictionary = Environment.GetEnvironmentVariables()
Dim de As DictionaryEntry
For Each de In envVars
Debug.WriteLine(de.Key & " = " & de.Value)
Next
If these two lists match, you're in business. If not, it means that your application isn't picking up the system variables. A work around would have to be devised...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Sorry Dave I think you missed a few things )
1) I'm already using Windows 200 SP4, this has not changed but the DLL has
2) As per the code in my previous postings I am broadcasting the WM_SETTINGCHANGE message and it is working
3) After my app has set the variables I have checked they are set correctly from within visual studio as you have suggested AND from a command prompt (all looks OK)
...but the function called in the unmanaged DLL can't see the variables.
Is it true that the DLL only inherits the environment that is set for the application when it first loads and therefore any env var changes are not seen? Have you heard this before?
anyone else want to chip in?
|
|
|
|
|
madfiddlerchris wrote:
1) I'm already using Windows 200 SP4, this has not changed but the DLL has
2) As per the code in my previous postings I am broadcasting the WM_SETTINGCHANGE message and it is working
All part of the troubleshooting process...I had to ask.
madfiddlerchris wrote:
3) After my app has set the variables I have checked they are set correctly from within visual studio as you have suggested AND from a command prompt (all looks OK)
Now what about inside your own app? Does your own app respond to the WM_SETTINGCHANGE message?
madfiddlerchris wrote:
Is it true that the DLL only inherits the environment that is set for the application when it first loads and therefore any env var changes are not seen? Have you heard this before?
Yes, it's true. This is because the .DLL is loaded into the same process space as your application, and therefore into the same execution environment, security context, environment variables, ... everything. It is not a seperate app, but an extension of your application just like any other part of your app.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
hi,
I m new to vB.Neti have designed an aplication that scrolls an image, as a background of panel control, accross tha desktop but while scrolling it flickers how can u remove that flickeri.e. it dose not scrolls smooth . I have heard something like double buffer but i havent find some thing useful or an example in VB.Net
Please give me some code example how to enabel double buffering for PAnel Control
|
|
|
|
|
You need to create an inherited panel class so you can set the graphics ControlStyle bits like you can with a form. Here is a snippet:
Public Class GraphicsPanel
Inherits System.Windows.Forms.Panel
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
Me.SetStyle(ControlStyles.AllPaintingInWmPaint _
Or ControlStyles.DoubleBuffer _
Or ControlStyles.UserPaint, True)
Me.UpdateStyles()
End Sub
You need to set all three bits for double buffering to work.
Gary S
|
|
|
|
|
I'm getting an "Unspecified Error" message when I try to run the following code using .NET's System.DirectoryServices to enumerate a list of local groups on a machine. The error pops up right at the point of enumeration of the groups. This only happens when I run this program on an NT machine. It works fine on Windows 2000 and XP. If anyone knows a workaround for this on NT, please let me know. Thanks. Anyway, the code that produces this error is as follows:
Public Sub FindAllGroups()
Try
Dim obComputer As DirectoryEntry
Dim obGroups As DirectoryEntries
Dim strComputer As String = Environ("ComputerName")
Dim itmGroup As ListViewItem
Dim obGroup As DirectoryEntry
obComputer = New DirectoryEntry("WinNT://" + strComputer + ",computer")
obComputer.Children.SchemaFilter.Add("group")
obGroups = obComputer.Children()
'This is where the error starts at
For Each obGroup In obGroups
MsgBox(obGroup.Name) 'display group name
Next
Catch ex As Exception
'Error jumps right to this point
MsgBox(ex.Message) ' spits out unspecified error
End Try
End Sub
|
|
|
|
|
Nevermind,
I figured it out. I needed to install DSClient on the computer in order to use all the ADSI stuff.
|
|
|
|
|
I have asked to change a custom made desktop shell that allows the user to click on various icons to start applications. The custom made shell uses a normal form, which then contains the icons required.
What I have been asked to do is cause a window to open when the user clicks on a Logout icon, that asks them why they wish to logout. So I have created a another form. This contains the usual OK and Cancel buttons and some option buttons inside a frame.
When the user clicks on the logout icon I have carried out a call to the 'Reason for Leaving' form by doing a frmReason.Form_Load. So far everything works ok, and when the user clicks on OK as long as the user has selected a reason for logging out, the user is logged out of NT. However I have a problem when the user clicks on the Cancel button. I want the Form frmReason to close down and redisplay the main form. This though seems to cause a problem.
Is my only way around this to use an MDIForm and then specify the other form as an MDIChildForm.
If the second form I had to open was a MsgBox instead that would be great as this seems to close down without any problems.
Simes
|
|
|
|
|
Hi Simon,
rather than showing frmReason by calling frmReason.From_Load (which you should never do) use something like this...
dim result as DialogResult = frmReason.ShowDialog()
This will allow a DialogResult to be returned to the call. You can then evaluate result to determine what to do next.
i.e.
if result = DialogResult.Ok then
'LogOut of NT
elseif result = DialogResult.Cancel then
'Don't logout of NT
end if
of course you'll still want to evaluate whether or not the person selected a reason in the closing event of the frmReason in order to determine whether or not to close the reason form.
hope this helps.
-jim
|
|
|
|
|
Jim,
Thanks for the reply, but isn't what you have specified to do with Java
Simon
|
|
|
|
|
No, it's not. He just posted a little pseudo-code to give you the idea.
He's right about calling Form_Load. That is something you should never call yourself. The .ShowDialog method is the best way to go, based on the requirements you gave.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Ok, thanks for the tip, but I think I should explin that I am coding in VB 6.0 and not VB .NET. On MSDN there is no mention of VB 6.0 using ShowDialog only VB .NET, hence my confusion. Sorry to say but work still uses VB 6.0 and has not yet progressed to VB .NET
Any other ideas.
All the stuff I have read seems to suggest that I can just do a frmReason.Hide or an Unload frmReason, but when I do this it still leaves the form displayed on the screen and the focus seems to be on an icon on the underlying Form (I can't even seem to select it, everything just locks up and I have to log out of NT).
Thanks Simes
|
|
|
|
|
In that case, it's you'll have to change the way you get the information from the dialog.
You'll build your dialog using a normal form. On it, you have to handle the OK and Cancel buttons. You'll also have to supply a Public Property that holds the DialogResult you set using the OK and Cancel button handlers. To make things a little easier, set the default value for the Property to some value that represents Canceled in the Form's Activate event. When the user clicks OK, set the DialogResult to a different value that represent OK and set the Form's public properties to values that you need from the Form.
Now, to use the dialog, just make a new instance of the form and Show it modal:
myDialog.Show vbModal, Me ' this call will block until the new form is OK'd or Cancel'd.
If myDialog.DialogResult = DialogResult.OK Then
' Pull the values you need from the form
End If
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
yup. what he said...
sorry, was out for lunch. (urp)
-jim
|
|
|
|
|
|
Could someone tell me what I am doing wrong? I am trying to add access into visual basic. I have changed the server for access (Microsoft Jet 4.0 OLE DB Provider). I have done the test connection - all is well. I have added the dataGrid to the web form- Named it MyDG1. I clicked on OldDbDataAdapter and added the connection where the access page is. I have done the Query builder, generate dataset (which I called MyDS). I selected the the dataset and Previewed it - all is well when I filled it in. I assigned a table to the DataView - Shopping Products (my access page). I assigned the DataSource property on the DataGrid as DataView1. In the page_load handler I added
OleDbDataAdaper1.Fill(MyDS1)
Page.DataBind()
I build it - all is good; however when I view in browser that is when I get my error. Here is my error.
Server Error in '/WebApplication1/WebApplication1/Unit5' Application.
--------------------------------------------------------------------------------
Unspecified error
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.OleDb.OleDbException: Unspecified error
Source Error:
Line 83: Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Line 84: 'Put user code to initialize the page here
Line 85: OleDbDataAdapter1.Fill(MyDS1)
Line 86: Page.DataBind()
Line 87: End Sub
Source File: c:\inetpub\wwwroot\WebApplication1\WebApplication1\Unit5\WebForm1.aspx.vb Line: 85
Stack Trace:
[OleDbException (0x80004005): Unspecified error]
System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) +20
System.Data.OleDb.OleDbConnection.InitializeProvider() +57
System.Data.OleDb.OleDbConnection.Open() +203
System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState) +44
System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +304
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +77
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +38
Unit5.WebForm1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\WebApplication1\WebApplication1\Unit5\WebForm1.aspx.vb:85
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +731
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:1.1.4322.573; ASP.NET Version:1.1.4322.573
Can anybody help me?
Thank you,
ibok23
|
|
|
|
|
You question would be better handled in the ASP.NET Forum.
But, off the top of my head, does your server's ASP.NET account have the rights to the folder and database file that your access database resides in?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
yes, i coded it so it would allow the database. I will approach asp.net now. Thanks,
Thank you,
ibok23
|
|
|
|
|
Helo, I am building an VB.NET application that should be able to send a short message service to mobile phone. How should i build it? What resources should I need to build such application?
Thanks
Learning .NET
|
|
|
|
|
Sending SMS messages takes some in depth knowledge of SMS.
You can start by checking out http://www.schmidks.de/vbsms.aspx[^], http://www.textforce.com/sms_api/vb_example.htm[^]. Also, there are a bunch of articles here on CP. Just type "SMS" into the Search box just below the Code Project logo at the top of any page.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|