|
Sorry but you should review your coding style. Such a helper function should not depend on class members. Its also not needed to catch an exception only to throw it without any processing. Finally I think its not doing what the poster tried to achieve. If your function processes two string like 'A.B.C' and 'A.B.D.' it would generate two totally different trees in the treeview, instead of one.
Here my code proposal:
<br />
Public Sub AddItem(ByVal text As String, ByVal tree As TreeView)<br />
Dim item As String<br />
Dim node As TreeNode<br />
Dim splitted As String() = text.Split(".")<br />
Dim currentNodes As TreeNodeCollection = tree.Nodes<br />
<br />
For Each item In splitted<br />
node = GetNodeWithText(item, currentNodes)<br />
If node Is Nothing Then<br />
node = currentNodes.Add(item)<br />
End If<br />
currentNodes = node.Nodes<br />
Next<br />
End Sub<br />
<br />
Private Function GetNodeWithText(ByVal text As String, ByVal nodes As TreeNodeCollection) As TreeNode<br />
Dim node As TreeNode<br />
<br />
For Each node In nodes<br />
If node.Text = text Then<br />
Return node<br />
End If<br />
Next<br />
<br />
Return Nothing<br />
End Function<br />
Note that this code is probably not very performant as the GetNodeWithText function will search in linear time. But as long as the treeview doesnt get filled with thousands of items it will work fine.
|
|
|
|
|
hi Robert,
Actually i was just doing R & D for given problem and i could't review it ...
Anyway ThanX for Suggestion..... I will Try to Improve my Coding Style Before posting ...........
regards,
Ritesh
|
|
|
|
|
Hi.
I guess you all know about PE files' timestamps. The are in hex, and for example
41DE6BF7 means 07/01/2005 11:01:11.
I tried many ways to 'convert' the timestamp to a DateTime object, but they all failed. (DateTime.FromFileTime(...), FromTicks(...)
My question is, how to 'convert' the hex value to a DateTime.
Thanks in advance and best regards,
Stan
|
|
|
|
|
See the SDK documentation for IMAGE_FILE_HEADER. This reveals that the field is a 32-bit integer representing the number of seconds since 1 January 1970 00:00:00. Probably the easiest way to handle it is to construct a DateTime representing that date, then use AddSeconds.
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
Hi,
we are working with microsoft technology like for windown application development is in C# and web development in asp.net so for testing the site or window application which testing tool is more reliable and giving excellent result.As there are numbers of testing tools are available on internet but which one is best and reliable.
can anybody tell me into that.?
regards.,
montu3377
|
|
|
|
|
Hi
I seem to having a number of issues when I try to compile my VC++ VC6 application of VC7.
The main error I get is:
error C2065: 'alloca' : undeclared identifier c:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include\cstringt.h line 187
Any ideas??
Many thanks
Tom
|
|
|
|
|
Hello all,
I am writing a simple application which uses an XML file as a log file. It's really nothing more than a simple text editing application.
My question is this: am I better off, from a performance/memory usage standpoint, to create an XmlDocument member of my class so that I have only one document open, but always available, or, should I create a new document as needed, and let it get disposed each time it goes out of scope?
Here's some sample code of what I mean:
public class MyClass
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(pathToFile);
void fn1(XmlDocument aCopy)
{}
void fn2(XmlDocument anotherCopy)
{}
void fn3()
{}
//etc...
}
or
public class MyClass
{
void fn1()
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(pathToFile);
}
void fn2()
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(pathToFile);
}
void fn3()
//etc...
}
I read all the best practice documents I could find on MSDN, but they only addressed the plusses and minuses of using the DOM vs. SAX, and gave no guidance on the best way of implementing a class using the DOM.
Thanks all,
John Guin
|
|
|
|
|
JohnGuin wrote:
I read all the best practice documents I could find on MSDN, but they only addressed the plusses and minuses of using the DOM vs. SAX, and gave no guidance on the best way of implementing a class using the DOM.
That's not really a surprise, as I don't think this has a lot to do with XML DOM. It's more of a design question.
Anyway, I would make this decision based on how much the XmlDocument gets used. If it is used extensively throughout your applicaton, I might keep it alive for the life of the object in question. If, on the other hand, it is used only at startup and stutdown, for example, I would instantiate it as needed.
Every time it is loaded, it takes a certain amount of time to read it from disk and parse the XML. That's not something I would want happening constantly. Nor would I want to spend my memory on something that's just sitting there and not being used. Either could be correct, depending on the circumstances.
Charlie
if(!curlies){ return; }
|
|
|
|
|
I'm experiencing a problem in Visual Studio.NET 2003 7.1.3088 w/.NET Framework 1.1 SP-1 that is causing me to lose several hours of development time each week.
When running in my development environment, the first thrown exception causes my application to stop responding for 32-33 seconds. All subsequent exceptions thrown during an application run cause absolutely no delay. An example of code that will cause this problem is:
int z = 0;
int i = 1 / z;
However, the following code will never cause a delay:
throw new Exception("New Exception");
During the entire period that my application is frozen, devenv.exe is hogging 48-50% of my CPU cycles, according to Task Manager. (The other 50-52% is listed as idle.) As soon as this number drops to 0, my application resumes.
A tiny test project demonstrating everything detailed here, with timer code, is available at http://bladetechnologies.us/Files/ExceptionTest.zip.
Googling this madness reveals that many others have experienced "first exception delays" of 2-5 seconds, and that a couple of developers have even seen delays of 10 seconds, but I've read of no one who's approached half a minute. Additionally, reports indicate that with everyone else, the delay does not appear when running the application in Release mode in the development environment, only in Debug mode. In my case, the problem occurs in both modes. When I run the .exe outside of the development environment, however, the problem disappears. Unfortunately, that doesn't help me when debugging.
I'm running Win XP Pro SP-2 on a clean, well-maintained, less-than-six-month-old HP Pavilion zx5000 notebook, with a 3.4 GHz HT P4 CPU, 1 GB RAM, and plenty of HD space.
I'm desperate. Any suggestions will be greatly appreciated.
Jason M. Purcell
Blade Technologies
|
|
|
|
|
I should have also mentioned that this behavior occurs whether the error is handled or unhandled.
Jason
|
|
|
|
|
Try disabling hyperthreading in the bios setup. I have a Dell 3.0Ghz with hyperthreading, and always run with it disabled, as it seems to cause too many lockups. I ran your test without HT, and get 1.48 sec delay for "Big Problem" first (consistent over several restarts). I enable HT, and on first reboot the time for this increased to 1.85 (also consistent).
I then noticed a "new hardware found" notification for APCI multiprocessor CPU, and rebooted again. On this reboot, the "big problem" time went to 2.88 sec, and My machine locked up hard with the message box displayed. Would not honor CTRL-ALT_DEL or the (soft) power switch. Had to disconnect AC to recover.
Needless to say, HT is back to disabled...
WinXP Pro SP1, Vs 2003 7.1.3088, Framwork 1.1 SP1.
Why would anyone waste time arguing with an accountant about anything? Their sole function is to record what happenned, and any higher aspirations are mere delusions of grandeur. On the ladder of productive contributions they are the little rubber pads at the bottom that keep the thing from sliding out from under you. - Roger Wright
|
|
|
|
|
Thanks for the suggestion, Rob. Unfortunately, my notebook's BIOS interface is a dumbed-down version that won't allow me to disable HT. I've written HP support for a workaround.
Jason
|
|
|
|
|
|
Thanks, Colin. Unfortunately, I can't access my secondary cache settings from the BIOS, because my BIOS is purposely limited to prevent users from tinkering with their systems. I wrote HP and asked for a way to access the full set of BIOS features, and was basically told: "You don't need to access BIOS settings. The system chooses the correct settings for you." Nothing like paying $2,500 to be treated like a child.
Rob, HP did provide me with a boot.ini workround to disable hyper-threading, but doing so only increased the error-handling time to 42 seconds.
Jason
|
|
|
|
|
I’d be really glad to learn how serial com port communication is done using Visual C++.NET and Visual Basic.NET as I’m going to create an application where a master desktop/laptop PC communicates Modbus RTU protocol with external slave devices. My (beginner’s) questions are:
1. How is serial com port communication done using Visual C++.NET and Visual Basic.NET respectively (according to Microsoft)?
2. Which of Visual C++.NET or Visual Basic.NET would be the more suitable language for a serial com port Modbus communication application like this?
3. Is there any comprehensive literature dealing with serial com port communication using Visual C++.NET and Visual Basic.NET (maybe even Modbus specifically)?
4. Are there any good sites where source code for Visual C++.NET and Visual Basic.NET serial com port communication (maybe even Modbus specifically) can be downloaded/bought?
|
|
|
|
|
Hi,
Here i have entire class(Found at MS Site don't remember the link...) which can access Serial as well as Parallel Port ..
Just Copy this Call and Make it's dll rest is Simple as u go through the code..........
Option Strict On
Imports System.Runtime.InteropServices
Imports System.Text
Imports System.Threading
' This class provides all the necessary support for communicating
' with the Comm Port (otherwise known as the Serial Port, or
' RS232 port).
Public Class Rs232
' Declare the necessary class variables, and their initial values.
Private mhRS As Integer = -1 ' Handle to Com Port
Private miPort As Integer = 1 ' Default is COM1
Private miTimeout As Integer = 70 ' Timeout in ms
Private miBaudRate As Integer = 9600
Private meParity As DataParity = 0
Private meStopBit As DataStopBit = 0
Private miDataBit As Integer = 8
Private miBufferSize As Integer = 512 ' Buffers size default to 512 bytes
Private mabtRxBuf As Byte() ' Receive buffer
Private meMode As Mode ' Class working mode
Private mbWaitOnRead As Boolean
Private mbWaitOnWrite As Boolean
Private mbWriteErr As Boolean
Private muOverlapped As OVERLAPPED
Private muOverlappedW As OVERLAPPED
Private muOverlappedE As OVERLAPPED
Private mabtTmpTxBuf As Byte() ' Temporary buffer used by Async Tx
Private moThreadTx As Thread
Private moThreadRx As Thread
Private miTmpBytes2Read As Integer
Private meMask As EventMasks
#Region "Enums"
' This enumeration provides Data Parity values.
Public Enum DataParity
Parity_None = 0
Pariti_Odd
Parity_Even
Parity_Mark
End Enum
' This enumeration provides Data Stop Bit values.
' It is set to begin with a one, so that the enumeration values
' match the actual values.
Public Enum DataStopBit
StopBit_1 = 1
StopBit_2
End Enum
' This enumeration contains values used to purge the various buffers.
Private Enum PurgeBuffers
RXAbort = &H2
RXClear = &H8
TxAbort = &H1
TxClear = &H4
End Enum
' This enumeration provides values for the lines sent to the Comm Port
Private Enum Lines
SetRts = 3
ClearRts = 4
SetDtr = 5
ClearDtr = 6
ResetDev = 7 ' Reset device if possible
SetBreak = 8 ' Set the device break line.
ClearBreak = 9 ' Clear the device break line.
End Enum
' This enumeration provides values for the Modem Status, since
' we'll be communicating primarily with a modem.
' Note that the Flags() attribute is set to allow for a bitwise
' combination of values.
<flags()> Public Enum ModemStatusBits
ClearToSendOn = &H10
DataSetReadyOn = &H20
RingIndicatorOn = &H40
CarrierDetect = &H80
End Enum
' This enumeration provides values for the Working mode
Public Enum Mode
NonOverlapped
Overlapped
End Enum
' This enumeration provides values for the Comm Masks used.
' Note that the Flags() attribute is set to allow for a bitwise
' combination of values.
<flags()> Public Enum EventMasks
RxChar = &H1
RXFlag = &H2
TxBufferEmpty = &H4
ClearToSend = &H8
DataSetReady = &H10
ReceiveLine = &H20
Break = &H40
StatusError = &H80
Ring = &H100
End Enum
#End Region
#Region "Structures"
' This is the DCB structure used by the calls to the Windows API.
<structlayout(layoutkind.sequential, pack:="1)"> Private Structure DCB
Public DCBlength As Integer
Public BaudRate As Integer
Public Bits1 As Integer
Public wReserved As Int16
Public XonLim As Int16
Public XoffLim As Int16
Public ByteSize As Byte
Public Parity As Byte
Public StopBits As Byte
Public XonChar As Byte
Public XoffChar As Byte
Public ErrorChar As Byte
Public EofChar As Byte
Public EvtChar As Byte
Public wReserved2 As Int16
End Structure
' This is the CommTimeOuts structure used by the calls to the Windows API.
<structlayout(layoutkind.sequential, pack:="1)"> Private Structure COMMTIMEOUTS
Public ReadIntervalTimeout As Integer
Public ReadTotalTimeoutMultiplier As Integer
Public ReadTotalTimeoutConstant As Integer
Public WriteTotalTimeoutMultiplier As Integer
Public WriteTotalTimeoutConstant As Integer
End Structure
' This is the CommConfig structure used by the calls to the Windows API.
<structlayout(layoutkind.sequential, pack:="1)"> Private Structure COMMCONFIG
Public dwSize As Integer
Public wVersion As Int16
Public wReserved As Int16
Public dcbx As DCB
Public dwProviderSubType As Integer
Public dwProviderOffset As Integer
Public dwProviderSize As Integer
Public wcProviderData As Byte
End Structure
' This is the OverLapped structure used by the calls to the Windows API.
<structlayout(layoutkind.sequential, pack:="1)"> Public Structure OVERLAPPED
Public Internal As Integer
Public InternalHigh As Integer
Public Offset As Integer
Public OffsetHigh As Integer
Public hEvent As Integer
End Structure
#End Region
#Region "Exceptions"
' This class defines a customized channel exception. This exception is
' raised when a NACK is raised.
Public Class CIOChannelException : Inherits ApplicationException
Sub New(ByVal Message As String)
MyBase.New(Message)
End Sub
Sub New(ByVal Message As String, ByVal InnerException As Exception)
MyBase.New(Message, InnerException)
End Sub
End Class
' This class defines a customized timeout exception.
Public Class IOTimeoutException : Inherits CIOChannelException
Sub New(ByVal Message As String)
MyBase.New(Message)
End Sub
Sub New(ByVal Message As String, ByVal InnerException As Exception)
MyBase.New(Message, InnerException)
End Sub
End Class
#End Region
#Region "Events"
' These events allow the program using this class to react to Comm Port
' events.
Public Event DataReceived(ByVal Source As Rs232, ByVal DataBuffer() As Byte)
Public Event TxCompleted(ByVal Source As Rs232)
Public Event CommEvent(ByVal Source As Rs232, ByVal Mask As EventMasks)
#End Region
#Region "Constants"
' These constants are used to make the code clearer.
Private Const PURGE_RXABORT As Integer = &H2
Private Const PURGE_RXCLEAR As Integer = &H8
Private Const PURGE_TXABORT As Integer = &H1
Private Const PURGE_TXCLEAR As Integer = &H4
Private Const GENERIC_READ As Integer = &H80000000
Private Const GENERIC_WRITE As Integer = &H40000000
Private Const OPEN_EXISTING As Integer = 3
Private Const INVALID_HANDLE_VALUE As Integer = -1
Private Const IO_BUFFER_SIZE As Integer = 1024
Private Const FILE_FLAG_OVERLAPPED As Integer = &H40000000
Private Const ERROR_IO_PENDING As Integer = 997
Private Const WAIT_OBJECT_0 As Integer = 0
Private Const ERROR_IO_INCOMPLETE As Integer = 996
Private Const WAIT_TIMEOUT As Integer = &H102&
Private Const INFINITE As Integer = &HFFFFFFFF
#End Region
#Region "Properties"
' This property gets or sets the BaudRate
Public Property BaudRate() As Integer
Get
Return miBaudRate
End Get
Set(ByVal Value As Integer)
miBaudRate = Value
End Set
End Property
' This property gets or sets the BufferSize
Public Property BufferSize() As Integer
Get
Return miBufferSize
End Get
Set(ByVal Value As Integer)
miBufferSize = Value
End Set
End Property
' This property gets or sets the DataBit.
Public Property DataBit() As Integer
Get
Return miDataBit
End Get
Set(ByVal Value As Integer)
miDataBit = Value
End Set
End Property
' This write-only property sets or resets the DTR line.
Public WriteOnly Property Dtr() As Boolean
Set(ByVal Value As Boolean)
If Not mhRS = -1 Then
If Value Then
EscapeCommFunction(mhRS, Lines.SetDtr)
Else
EscapeCommFunction(mhRS, Lines.ClearDtr)
End If
End If
End Set
End Property
' This read-only property returns an array of bytes that represents
' the input coming into the Comm Port.
Overridable ReadOnly Property InputStream() As Byte()
Get
Return mabtRxBuf
End Get
End Property
' This read-only property returns a string that represents
' the data coming into to the Comm Port.
Overridable ReadOnly Property InputStreamString() As String
Get
Dim oEncoder As New System.Text.ASCIIEncoding()
Return oEncoder.GetString(Me.InputStream)
End Get
End Property
' This property returns the open status of the Comm Port.
ReadOnly Property IsOpen() As Boolean
Get
Return CBool(mhRS <> -1)
End Get
End Property
' This read-only property returns the status of the modem.
Public ReadOnly Property ModemStatus() As ModemStatusBits
Get
If mhRS = -1 Then
Throw New ApplicationException("Please initialize and open " + _
"port before using this method")
Else
' Retrieve modem status
Dim lpModemStatus As Integer
If Not GetCommModemStatus(mhRS, lpModemStatus) Then
Throw New ApplicationException("Unable to get modem status")
Else
Return CType(lpModemStatus, ModemStatusBits)
End If
End If
End Get
End Property
' This property gets or sets the Parity
Public Property Parity() As DataParity
Get
Return meParity
End Get
Set(ByVal Value As DataParity)
meParity = Value
End Set
End Property
' This property gets or sets the Port
Public Property Port() As Integer
Get
Return miPort
End Get
Set(ByVal Value As Integer)
miPort = Value
End Set
End Property
' This write-only property sets or resets the RTS line.
Public WriteOnly Property Rts() As Boolean
Set(ByVal Value As Boolean)
If Not mhRS = -1 Then
If Value Then
EscapeCommFunction(mhRS, Lines.SetRts)
Else
EscapeCommFunction(mhRS, Lines.ClearRts)
End If
End If
End Set
End Property
' This property gets or sets the StopBit
Public Property StopBit() As DataStopBit
Get
Return meStopBit
End Get
Set(ByVal Value As DataStopBit)
meStopBit = Value
End Set
End Property
' This property gets or sets the Timeout
Public Overridable Property Timeout() As Integer
Get
Return miTimeout
End Get
Set(ByVal Value As Integer)
miTimeout = CInt(IIf(Value = 0, 500, Value))
' If Port is open updates it on the fly
pSetTimeout()
End Set
End Property
' This property gets or sets the working mode to overlapped
' or non-overlapped.
Public Property WorkingMode() As Mode
Get
Return meMode
End Get
Set(ByVal Value As Mode)
meMode = Value
End Set
End Property
#End Region
#Region "Win32API"
' The following functions are the required Win32 functions needed to
' make communication with the Comm Port possible.
<dllimport("kernel32.dll")> Private Shared Function BuildCommDCB( _
ByVal lpDef As String, ByRef lpDCB As DCB) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function ClearCommError( _
ByVal hFile As Integer, ByVal lpErrors As Integer, _
ByVal l As Integer) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function CloseHandle( _
ByVal hObject As Integer) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function CreateEvent( _
ByVal lpEventAttributes As Integer, ByVal bManualReset As Integer, _
ByVal bInitialState As Integer, _
<marshalas(unmanagedtype.lpstr)> ByVal lpName As String) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function CreateFile( _
<marshalas(unmanagedtype.lpstr)> ByVal lpFileName As String, _
ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, _
ByVal lpSecurityAttributes As Integer, _
ByVal dwCreationDisposition As Integer, _
ByVal dwFlagsAndAttributes As Integer, _
ByVal hTemplateFile As Integer) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function EscapeCommFunction( _
ByVal hFile As Integer, ByVal ifunc As Long) As Boolean
End Function
<dllimport("kernel32.dll")> Private Shared Function FormatMessage( _
ByVal dwFlags As Integer, ByVal lpSource As Integer, _
ByVal dwMessageId As Integer, ByVal dwLanguageId As Integer, _
<marshalas(unmanagedtype.lpstr)> ByVal lpBuffer As String, _
ByVal nSize As Integer, ByVal Arguments As Integer) As Integer
End Function
Private Declare Function FormatMessage Lib "kernel32" Alias _
"FormatMessageA" (ByVal dwFlags As Integer, ByVal lpSource As Integer, _
ByVal dwMessageId As Integer, ByVal dwLanguageId As Integer, _
ByVal lpBuffer As StringBuilder, ByVal nSize As Integer, _
ByVal Arguments As Integer) As Integer
<dllimport("kernel32.dll")> Public Shared Function GetCommModemStatus( _
ByVal hFile As Integer, ByRef lpModemStatus As Integer) As Boolean
End Function
<dllimport("kernel32.dll")> Private Shared Function GetCommState( _
ByVal hCommDev As Integer, ByRef lpDCB As DCB) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function GetCommTimeouts( _
ByVal hFile As Integer, ByRef lpCommTimeouts As COMMTIMEOUTS) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function GetLastError() As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function GetOverlappedResult( _
ByVal hFile As Integer, ByRef lpOverlapped As OVERLAPPED, _
ByRef lpNumberOfBytesTransferred As Integer, _
ByVal bWait As Integer) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function PurgeComm( _
ByVal hFile As Integer, ByVal dwFlags As Integer) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function ReadFile( _
ByVal hFile As Integer, ByVal Buffer As Byte(), _
ByVal nNumberOfBytesToRead As Integer, _
ByRef lpNumberOfBytesRead As Integer, _
ByRef lpOverlapped As OVERLAPPED) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function SetCommTimeouts( _
ByVal hFile As Integer, ByRef lpCommTimeouts As COMMTIMEOUTS) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function SetCommState( _
ByVal hCommDev As Integer, ByRef lpDCB As DCB) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function SetupComm( _
ByVal hFile As Integer, ByVal dwInQueue As Integer, _
ByVal dwOutQueue As Integer) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function SetCommMask( _
ByVal hFile As Integer, ByVal lpEvtMask As Integer) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function WaitCommEvent( _
ByVal hFile As Integer, ByRef Mask As EventMasks, _
ByRef lpOverlap As OVERLAPPED) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function WaitForSingleObject( _
ByVal hHandle As Integer, ByVal dwMilliseconds As Integer) As Integer
End Function
<dllimport("kernel32.dll")> Private Shared Function WriteFile( _
ByVal hFile As Integer, ByVal Buffer As Byte(), _
ByVal nNumberOfBytesToWrite As Integer, _
ByRef lpNumberOfBytesWritten As Integer, _
ByRef lpOverlapped As OVERLAPPED) As Integer
End Function
#End Region
#Region "Methods"
' This subroutine invokes a thread to perform an asynchronous read.
' This routine should not be called directly, but is used
' by the class.
Public Sub _R()
Dim iRet As Integer = Read(miTmpBytes2Read)
End Sub
' This subroutine invokes a thread to perform an asynchronous write.
' This routine should not be called directly, but is used
' by the class.
Public Sub _W()
Write(mabtTmpTxBuf)
End Sub
' This subroutine uses another thread to read from the Comm Port. It
' raises RxCompleted when done. It reads an integer.
Public Overloads Sub AsyncRead(ByVal Bytes2Read As Integer)
If meMode <> Mode.Overlapped Then Throw New ApplicationException( _
"Async Methods allowed only when WorkingMode=Overlapped")
miTmpBytes2Read = Bytes2Read
moThreadTx = New Thread(AddressOf _R)
moThreadTx.Start()
End Sub
' This subroutine uses another thread to write to the Comm Port. It
' raises TxCompleted when done. It writes an array of bytes.
Public Overloads Sub AsyncWrite(ByVal Buffer() As Byte)
If meMode <> Mode.Overlapped Then Throw New ApplicationException( _
"Async Methods allowed only when WorkingMode=Overlapped")
If mbWaitOnWrite = True Then Throw New ApplicationException( _
"Unable to send message because of pending transmission.")
mabtTmpTxBuf = Buffer
moThreadTx = New Thread(AddressOf _W)
moThreadTx.Start()
End Sub
' This subroutine uses another thread to write to the Comm Port. It
' raises TxCompleted when done. It writes a string.
Public Overloads Sub AsyncWrite(ByVal Buffer As String)
Dim oEncoder As New System.Text.ASCIIEncoding()
Dim aByte() As Byte = oEncoder.GetBytes(Buffer)
Me.AsyncWrite(aByte)
End Sub
' This function takes the ModemStatusBits and returns a boolean value
' signifying whether the Modem is active.
Public Function CheckLineStatus(ByVal Line As ModemStatusBits) As Boolean
Return Convert.ToBoolean(ModemStatus And Line)
End Function
' This subroutine clears the input buffer.
Public Sub ClearInputBuffer()
If Not mhRS = -1 Then
PurgeComm(mhRS, PURGE_RXCLEAR)
End If
End Sub
' This subroutine closes the Comm Port.
Public Sub Close()
If mhRS <> -1 Then
CloseHandle(mhRS)
mhRS = -1
End If
End Sub
' This subroutine opens and initializes the Comm Port
Public Overloads Sub Open()
' Get Dcb block,Update with current data
Dim uDcb As DCB, iRc As Integer
' Set working mode
Dim iMode As Integer = Convert.ToInt32(IIf(meMode = Mode.Overlapped, _
FILE_FLAG_OVERLAPPED, 0))
' Initializes Com Port
If miPort > 0 Then
Try
' Creates a COM Port stream handle
mhRS = CreateFile("COM" & miPort.ToString, _
GENERIC_READ Or GENERIC_WRITE, 0, 0, _
OPEN_EXISTING, iMode, 0)
If mhRS <> -1 Then
' Clear all comunication errors
Dim lpErrCode As Integer
iRc = ClearCommError(mhRS, lpErrCode, 0&)
' Clears I/O buffers
iRc = PurgeComm(mhRS, PurgeBuffers.RXClear Or _
PurgeBuffers.TxClear)
' Gets COM Settings
iRc = GetCommState(mhRS, uDcb)
' Updates COM Settings
Dim sParity As String = "NOEM"
sParity = sParity.Substring(meParity, 1)
' Set DCB State
Dim sDCBState As String = String.Format( _
"baud={0} parity={1} data={2} stop={3}", _
miBaudRate, sParity, miDataBit, CInt(meStopBit))
iRc = BuildCommDCB(sDCBState, uDcb)
iRc = SetCommState(mhRS, uDcb)
If iRc = 0 Then
Dim sErrTxt As String = pErr2Text(GetLastError())
Throw New CIOChannelException( _
"Unable to set COM state0" & sErrTxt)
End If
' Setup Buffers (Rx,Tx)
iRc = SetupComm(mhRS, miBufferSize, miBufferSize)
' Set Timeouts
pSetTimeout()
Else
' Raise Initialization problems
Throw New CIOChannelException( _
"Unable to open COM" & miPort.ToString)
End If
Catch Ex As Exception
' Generica error
Throw New CIOChannelException(Ex.Message, Ex)
End Try
Else
' Port not defined, cannot open
Throw New ApplicationException("COM Port not defined, " + _
"use Port property to set it before invoking InitPort")
End If
End Sub
' This subroutine opens and initializes the Comm Port (overloaded
' to support parameters).
Public Overloads Sub Open(ByVal Port As Integer, _
ByVal BaudRate As Integer, ByVal DataBit As Integer, _
ByVal Parity As DataParity, ByVal StopBit As DataStopBit, _
ByVal BufferSize As Integer)
Me.Port = Port
Me.BaudRate = BaudRate
Me.DataBit = DataBit
Me.Parity = Parity
Me.StopBit = StopBit
Me.BufferSize = BufferSize
Open()
End Sub
' This function translates an API error code to text.
Private Function pErr2Text(ByVal lCode As Integer) As String
Dim sRtrnCode As New StringBuilder(256)
Dim lRet As Integer
lRet = FormatMessage(&H1000, 0, lCode, 0, sRtrnCode, 256, 0)
If lRet > 0 Then
Return sRtrnCode.ToString
Else
Return "Error not found."
End If
End Function
' This subroutine handles overlapped reads.
Private Sub pHandleOverlappedRead(ByVal Bytes2Read As Integer)
Dim iReadChars, iRc, iRes, iLastErr As Integer
muOverlapped.hEvent = CreateEvent(Nothing, 1, 0, Nothing)
If muOverlapped.hEvent = 0 Then
' Can't create event
Throw New ApplicationException( _
"Error creating event for overlapped read.")
Else
' Ovellaped reading
If mbWaitOnRead = False Then
ReDim mabtRxBuf(Bytes2Read - 1)
iRc = ReadFile(mhRS, mabtRxBuf, Bytes2Read, _
iReadChars, muOverlapped)
If iRc = 0 Then
iLastErr = GetLastError()
If iLastErr <> ERROR_IO_PENDING Then
Throw New ArgumentException("Overlapped Read Error: " & _
pErr2Text(iLastErr))
Else
' Set Flag
mbWaitOnRead = True
End If
Else
' Read completed successfully
RaiseEvent DataReceived(Me, mabtRxBuf)
End If
End If
End If
' Wait for operation to be completed
If mbWaitOnRead Then
iRes = WaitForSingleObject(muOverlapped.hEvent, miTimeout)
Select Case iRes
Case WAIT_OBJECT_0
' Object signaled,operation completed
If GetOverlappedResult(mhRS, muOverlapped, _
iReadChars, 0) = 0 Then
' Operation error
iLastErr = GetLastError()
If iLastErr = ERROR_IO_INCOMPLETE Then
Throw New ApplicationException( _
"Read operation incomplete")
Else
Throw New ApplicationException( _
"Read operation error " & iLastErr.ToString)
End If
Else
' Operation completed
RaiseEvent DataReceived(Me, mabtRxBuf)
mbWaitOnRead = False
End If
Case WAIT_TIMEOUT
Throw New IOTimeoutException("Timeout error")
Case Else
Throw New ApplicationException("Overlapped read error")
End Select
End If
End Sub
' This subroutine handles overlapped writes.
Private Function pHandleOverlappedWrite(ByVal Buffer() As Byte) As Boolean
Dim iBytesWritten, iRc, iLastErr, iRes As Integer, bErr As Boolean
muOverlappedW.hEvent = CreateEvent(Nothing, 1, 0, Nothing)
If muOverlappedW.hEvent = 0 Then
' Can't create event
Throw New ApplicationException( _
"Error creating event for overlapped write.")
Else
' Overllaped write
PurgeComm(mhRS, PURGE_RXCLEAR Or PURGE_TXCLEAR)
mbWaitOnRead = True
iRc = WriteFile(mhRS, Buffer, Buffer.Length, _
iBytesWritten, muOverlappedW)
If iRc = 0 Then
iLastErr = GetLastError()
If iLastErr <> ERROR_IO_PENDING Then
Throw New ArgumentException("Overlapped Read Error: " & _
pErr2Text(iLastErr))
Else
' Write is pending
iRes = WaitForSingleObject(muOverlappedW.hEvent, INFINITE)
Select Case iRes
Case WAIT_OBJECT_0
' Object signaled,operation completed
If GetOverlappedResult(mhRS, muOverlappedW, _
iBytesWritten, 0) = 0 Then
bErr = True
Else
' Notifies Async tx completion,stops thread
mbWaitOnRead = False
RaiseEvent TxCompleted(Me)
End If
End Select
End If
Else
' Wait operation completed immediatly
bErr = False
End If
End If
CloseHandle(muOverlappedW.hEvent)
Return bErr
End Function
' This subroutine sets the Comm Port timeouts.
Private Sub pSetTimeout()
Dim uCtm As COMMTIMEOUTS
' Set ComTimeout
If mhRS = -1 Then
Exit Sub
Else
' Changes setup on the fly
With uCtm
.ReadIntervalTimeout = 0
.ReadTotalTimeoutMultiplier = 0
.ReadTotalTimeoutConstant = miTimeout
.WriteTotalTimeoutMultiplier = 10
.WriteTotalTimeoutConstant = 100
End With
SetCommTimeouts(mhRS, uCtm)
End If
End Sub
' This function returns an integer specifying the number of bytes
' read from the Comm Port. It accepts a parameter specifying the number
' of desired bytes to read.
Public Function Read(ByVal Bytes2Read As Integer) As Integer
Dim iReadChars, iRc As Integer
' If Bytes2Read not specified uses Buffersize
If Bytes2Read = 0 Then Bytes2Read = miBufferSize
If mhRS = -1 Then
Throw New ApplicationException( _
"Please initialize and open port before using this method")
Else
' Get bytes from port
Try
' Purge buffers
'PurgeComm(mhRS, PURGE_RXCLEAR Or PURGE_TXCLEAR)
' Creates an event for overlapped operations
If meMode = Mode.Overlapped Then
pHandleOverlappedRead(Bytes2Read)
Else
' Non overlapped mode
ReDim mabtRxBuf(Bytes2Read - 1)
iRc = ReadFile(mhRS, mabtRxBuf, Bytes2Read, iReadChars, Nothing)
If iRc = 0 Then
' Read Error
Throw New ApplicationException( _
"ReadFile error " & iRc.ToString)
Else
' Handles timeout or returns input chars
If iReadChars < Bytes2Read Then
Throw New IOTimeoutException("Timeout error")
Else
mbWaitOnRead = True
Return (iReadChars)
End If
End If
End If
Catch Ex As Exception
' Others generic erroes
Throw New ApplicationException("Read Error: " & Ex.Message, Ex)
End Try
End If
End Function
' This subroutine writes the passed array of bytes to the
' Comm Port to be written.
Public Overloads Sub Write(ByVal Buffer As Byte())
Dim iBytesWritten, iRc As Integer
If mhRS = -1 Then
Throw New ApplicationException( _
"Please initialize and open port before using this method")
Else
' Transmit data to COM Port
Try
If meMode = Mode.Overlapped Then
' Overlapped write
If pHandleOverlappedWrite(Buffer) Then
Throw New ApplicationException( _
"Error in overllapped write")
End If
Else
' Clears IO buffers
PurgeComm(mhRS, PURGE_RXCLEAR Or PURGE_TXCLEAR)
iRc = WriteFile(mhRS, Buffer, Buffer.Length, _
iBytesWritten, Nothing)
If iRc = 0 Then
Throw New ApplicationException( _
"Write Error - Bytes Written " & _
iBytesWritten.ToString & " of " & _
Buffer.Length.ToString)
End If
End If
Catch Ex As Exception
Throw
End Try
End If
End Sub
' This subroutine writes the passed string to the
' Comm Port to be written.
Public Overloads Sub Write(ByVal Buffer As String)
Dim oEncoder As New System.Text.ASCIIEncoding()
Dim aByte() As Byte = oEncoder.GetBytes(Buffer)
Me.Write(aByte)
End Sub
#End Region
Example:
clsCOMPort.Open(1, 115200, 8, Rs232.DataParity.Parity_None, _
1, 4096)
m_CommPort.Write("Text to se send")
m_CommPort.CLose()
End Class
Hope this will Help u..................:->
Regards,
Ritesh
|
|
|
|
|
I'm having an issue with special characters being replaces by '?' in the xml document. A simple example is "école" comes out as "?cole".
I am setting an encoding on the xml document like this:
xmldecl = XMLoutPut.CreateXmlDeclaration("1.0",null,null);
xmldecl.Encoding="ISO-8859-1";
XMLoutPut.InsertBefore(xmldecl, ROOTnode);
Later when I load the xml document with the following method:
xmldocument.Load(xr); (where xr is a XmlTextReader object)
In quickwatch I can see my Encoding to be set as ISO-8859-1, but I still get '?' where special characters should go.
I also tried UTF-16, but I get the error: "There is no Unicode byte order mark. Cannot switch to Unicode" on the .Load function call.
Thanks in advance.
|
|
|
|
|
Hi All,
I have the Latest version of PDA and the OS is window Mobile 2003. In this PDA i have developed my small protype in comapct framework and also iam using ToolBar Control in that Prototype. In this new version on OS i cant view that ToolBar but that event was working.. If i load an image for that toolbar also i cant able to view that ToolBar.
Thanks and Regards,
Sridhar.
sdaf
|
|
|
|
|
In a MFC/WinForms mixed application (via CLR Hosting), I want to show a WinForms form and have a standard Win32 window as the parent (or "owner" as WinForms calls it).
When doing Form.ShowDialog( IWin32Window owner ) , everything behaves as expected; the IWin32Window is considered as the owner.
But when I want to show the form as nonmodal by using Form.Show() , I cannot pass an owner. So I tried to P/Invoke the Win32 ::SetParent() function and call it from within the Load handler of my WinForms form.
Unfortunately, the Win32 parent window seems to freeze and the WinForms window seems to never show up.
Question: How can I create a nonmodal WinForms form with a Win32 window being the owner?
--
Affordable Windows-based CMS: www.zeta-producer.com
|
|
|
|
|
By using Lutz Roeder's .NET Reflector[^] I figured out how Form.ShowDialog() does it and so I created a similar function that helped me:
public void Show(
IWin32Window owner )
{
if ( owner!=null && owner.Handle!=IntPtr.Zero && Handle!=IntPtr.Zero )
{
IntPtr ptr2 = GetActiveWindow();
IntPtr ptr3 = (owner == null) ? ptr2 : owner.Handle;
const int GWL_HWNDPARENT = -8;
GetWindowLong(new HandleRef(this, base.Handle), GWL_HWNDPARENT);
SetWindowLong(new HandleRef(this, base.Handle), GWL_HWNDPARENT, new HandleRef(owner, ptr3));
}
base.Show();
} Maybe this helps someone in case you ever needed it .
--
Affordable Windows-based CMS: www.zeta-producer.com
|
|
|
|
|
Hi All,
I have a query .Please help me on this.
The query is :
We a have acquired a different domain(Domain2.com). We will want to forward this to our existing website(domain1.com), and all e-mails that come in to anyone@domain2.com will be redirected to anyone@domain1.com.
With the our existing website, it doesn’t have a unique ip address that we can give the registrar to forward to, so whichever solution we use will need to be able refer/forward to the site by url name.
Can you suggest ways in which we can achieve this.
Regards
Ashu
ashu
|
|
|
|
|
Redirecting email: you need to take two steps. I'm assuming your mail is delivered via SMTP to a server you control, rather than being collected via some other protocol.
First, you need to set up your mail servers to handle the messages. If you're running Exchange 2000 or 2003, open Exchange System Manager, expand Recipients and Recipient Policies. If there's only one policy there, double-click it and go to the E-Mail Addresses (Policy) tab. Click New and select SMTP Address, then OK. Type '@domain2.com' in the Address field. Ensure 'This Exchange Organization is responsible for all mail delivery to this address' is checked. Click OK. The Recipient Policy Update process will now process all recipients in the organization (in AD) in the background.
Secondly, you need to tell the world how to send email to domain2.com. Find out who hosts domain2.com's DNS service (the name servers). You can find out if you don't already know by running nslookup:
C:\>nslookup
Default Server: resolver2.th.eclipse.net.uk
Address: 212.104.130.65
> set type=NS
> codeproject.com
Server: resolver2.th.eclipse.net.uk
Address: 212.104.130.65
Non-authoritative answer:
codeproject.com nameserver = ns.dundas.com
codeproject.com nameserver = ns2.dundas.com although you should know this. You need to tell the name server host what MX records to use.
> set type=MX
> codeproject.com
Server: resolver2.th.eclipse.net.uk
Address: 212.104.130.65
Non-authoritative answer:
codeproject.com MX preference = 10, mail exchanger = mail.codeproject.com You probably want some redundancy in there, so that if your first-choice mail server is unavailable, messages can still be queued elsewhere (we use a queuing service provided by our ISP). Of course mail.codeproject.com may be a load-balanced front-end Exchange server...
It takes a while for changes to DNS to propogate (servers are allowed - indeed, required - to cache DNS lookup results, and they can be cached at intermediate DNS servers too) so you should consider how you're going to get messages forwarded from the existing servers in the meantime.
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
How can I encapsulate my program into a software (with setup.exe file)?
My English is so bad. I hope u can understand what I mean ^_^
Thank you!
|
|
|
|
|
If you have Winrar, you can create simple exe files which can be started on all win32 computers. If you have Visual Studio 2003 .NET (Pro) you can create a Setup-file project.
And we understand your english
|
|
|
|
|
Okay.. i have a question regarding clipboard on a pocket pc running Windows CE. In the .Net framework there is plenty of functions which allows you to copy text in a textBox etc. to the clipboard, why are these functions disabled in the Pocket framework????
Thanks in advance...
|
|
|
|
|