|
hello friends
Reading c# books take a lot of my time
please can somebody give me a site where i can download
free C# videos
|
|
|
|
|
|
Im in the process of learning C#, and so far, I'm loving it. I've found a way to make calls to some old "C" DLLs, but I have a few questions regarding types.
[DllImport("MYDLL.DLL")]
public static extern ulong GetSerialNumbers ( byte f1, byte f2, byte NodeAddr, PIFS_CABLESER pserials, PUSHORT pcount );
I have a function in in MYDLL.DLL called GetSerialNumbers that returns an array of structures. I have no problems declaring functions with known types, but as soon as I add in a type that C# doesn't know, I'm stuck. I would like to take the data of these structures and copy them to a class I've created....
This is my C definition, would I have to make something equivalent that C# will understand?
typedef struct SerialInfoMD
{
byte ID[8];
byte something;
int new;
} IFS_CABLESER, *PIFS_CABLE_SER;
Anybody have any info to share?
Thanks!
Mike
|
|
|
|
|
Yes, as with the requirement of defining the function signature in C# you also have to supply a description of the structure as well. For the structure you provided the sig would be
[StructLayout(LayoutKind.Sequential)]
struct SerialInfoMD
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=8)]
public byte[] ID;
public byte Something;
public int New; // note the capitalization change. Syntax error otherwise.
}
Things can get tricky when marshalling data between managed and unmanaged code. For example, in your function signature you have the return type as ulong. Is the return type for the C function an unsigned long? Unsigned long is 32-bits on Win32 but is 64-bits on .NET so the appropriate return type in the C# method is uint if the return type on the C function is unsigned long. It gets even more murky when dealing with arrays. You might wanna check out information on data marshalling on MSDN. Try this URL for a start.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconInteropMarshaling.asp
|
|
|
|
|
hello, i need to change the scroll bar color for a ListView (i'm trying to make a flat gui). Can u plese help? Thx
|
|
|
|
|
You have to use css for that, and it will only work in Internet Explorer.
---
b { font-weight: normal; }
|
|
|
|
|
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2600&lngWId=10
Live Life King Size
Alomgir Miah
|
|
|
|
|
I need to create a Bitmap of a datagrid. Is there a way to do this?
|
|
|
|
|
VS.NET executes the code behind Propertys when you change them in the property grid in the designer. Is there anyway to modify the code such that it knows when it's being changed via the designer? There is some code in my get/set that has some unwanted side effects during design time.
|
|
|
|
|
|
Hi all.
I have a strange problem with Webservices:
In a webmethod I modify the value of a variable (string) inside an instance of a class that I created. When the webmethod returns, the change of the string is lost, and it returns to its initial value.
a concrete example
class MyClass {
private string s;
public string String {
get { return s; }
set { s = value; }
}
}
private MyClass data = new MyClass();
[WebMethod()]
public MyMethod(string s) {
data.String = s;
// Consume data.String -> correct value
}
private void otherMethod() {
// Consume data.String -> WRONG VALUE
}
The webservice calls MyMethod().
In a successive call to another webmethod, otherMethod() is called and the data.String value is wrong!!!
I tries to use methods Set() Get() instead of the public property but nothing changes.
Maybe I don't know an important thing???
Any help will be very ... HELPFUL!
|
|
|
|
|
|
Yeah! I'm so idiot! I know that! thank you for this mind shake! somethimes the simplest solution is there and you cannot see it...
|
|
|
|
|
Hello,
Is there a way of making the ComboBox as a typeahead?
In otherer words, user can't modify the text, but if start typing it will give you the corresponding entries in the dropdown list, depending on the string that user enters.
Thank you
|
|
|
|
|
private void ComboBox1_KeyUp(Object sender,System.Windows.Forms.KeyEventArgs e)
}
AutoCompleteCombo(ComboBox1,e);
}
public static void AutoCompleteCombo(ComboBox cbo,KeyEventArgs e)
{
String sTypedText;
Int32 iFoundIndex;
Object oFoundItem;
String sFoundText ;
String sAppendText ;
//'Allow select keys without Autocompleting
switch (e.KeyCode)
{
case Keys.Back:
break;
case Keys.Left:
break;
case Keys.Right:
break;
case Keys.Tab:
break;
case Keys.Up:
break;
case Keys.Delete:
break;
case Keys.Down:
break;
}
//'Get the Typed Text and Find it in the list
sTypedText = cbo.Text;
iFoundIndex = cbo.FindString(sTypedText);
//'If we found the Typed Text in the list then Autocomplete
if (iFoundIndex >= 0)
{ //'Get the Item from the list (Return Type depends if Datasource was bound
//' or List Created)
oFoundItem = cbo.Items[iFoundIndex];
//'Use the ListControl.GetItemText to resolve the Name in case the Combo
//' was Data bound
sFoundText = cbo.GetItemText(oFoundItem);
//'Append then found text to the typed text to preserve case
sAppendText = sFoundText.Substring(sTypedText.Length);
cbo.Text = sTypedText.ToString() + sAppendText.ToString();
//'Select the Appended Text
cbo.SelectionStart = sTypedText.Length;
cbo.SelectionLength = sAppendText.Length;
}
}
Live Life King Size
Alomgir Miah
|
|
|
|
|
Thank you.
Do I have to change the property of the DropDownStyle?
|
|
|
|
|
DropDownStyle should be
DropDown
Live Life King Size
Alomgir Miah
|
|
|
|
|
You can use autoComplete combobox or modify it
if you search site here you will find some of them
like this
like this[^]
MCAD
|
|
|
|
|
I am trying to create a DTS package using C#. I have done this in VB6 without any problems. However, when I convert everything over to C# I
get the 'System.InvalidCastException'. I am running windows 2000, SQL
2000 sp3a. I have also followed the instructions in using DTS provided
by "http://sqldev.net/DTS/dotnetcookbook.htm".
The error is occurs at this line:
<br />
DTS.DataPumpTask DT = (DTS.DataPumpTask)package.Tasks.New <br />
("DTSDataPumpTask"); <br />
Does anyone know what causes this and is there a fix for it?
Below is a copy of the code.
<br />
public void createPackag() <br />
{ <br />
DTS.Connection oConnection = <br />
(DTS.Connection)package.Connections.New("Microsoft.Jet.OLEDB.4.0"); <br />
<br />
<br />
oConnection.Name ="Connection 1"; <br />
oConnection.DataSource = "C:\\MySourceDB.MDB"; <br />
oConnection.ID = 1; <br />
oConnection.Reusable = true; <br />
oConnection.ConnectImmediate = false; <br />
oConnection.ConnectionTimeout = 60; <br />
oConnection.UseTrustedConnection = false; <br />
oConnection.UseDSL = false; <br />
oConnection = null; <br />
DTS.Connection oConnection2 = <br />
(DTS.Connection)package.Connections.New("SQLOLEDB"); <br />
oConnection2.Name = "Connection 2"; <br />
oConnection2.ID = 2; <br />
oConnection2.Reusable = true; <br />
oConnection2.ConnectImmediate= false; <br />
oConnection2.DataSource= "MyServerName"; <br />
oConnection2.UserID = "MyUserID"; <br />
oConnection2.ConnectionTimeout = 60; <br />
oConnection2.Catalog = "MyDestDB"; <br />
oConnection2.UseTrustedConnection = false; <br />
oConnection2.UseDSL = false; <br />
oConnection2.Password = "MyPassword"; <br />
oConnection2 = null; <br />
DTS.Step2 oStep = <br />
(DTS.Step2)package.Steps.New(); <br />
oStep.Name = "Copying Data from MyTable"; <br />
oStep.Description = "Copying Data from <br />
MyTable"; <br />
oStep.TaskName = "Copying Data from MyTable"; <br />
oStep.CommitSuccess = false; <br />
oStep.RollbackFailure = false; <br />
oStep.ScriptLanguage = "VBScript";
about this <br />
oStep.AddGlobalVariables = true; <br />
oStep.CloseConnection = false; <br />
oStep.ExecuteInMainThread = true; <br />
oStep.IsPackageDSORowset = false; <br />
oStep.JoinTransactionIfPresent = false; <br />
oStep.DisableStep = false; <br />
oStep.FailPackageOnError = true; <br />
package.Steps.Add(oStep); <br />
oStep = null; <br />
DTS.Task oTask = <br />
(DTS.Task)package.Tasks.New("DTSDataPumpTask"); <br />
oTask.Name = "Copying Data from MyTable"; <br />
DTS.CustomTask oCustomTask = oTask.CustomTask; <br />
oCustomTask.Name = "Copying Data from MyTable"; <br />
<br />
<br />
oCustomTask.Description = "Copying Data from <br />
MyTable to <br />
MyDestDB.MyTable"; <br />
DTS.DataPumpTask DT = <br />
(DTS.DataPumpTask)package.Tasks.New("DTSDataPumpTask"); <br />
DT.SourceConnectionID = 1; <br />
DT.SourceSQLStatement = "SELECT `TestField` <br />
FROM MyTable"; <br />
DT.DestinationConnectionID =2; <br />
DT.DestinationObjectName = "MyTable"; <br />
DT.ProgressRowCount = 1000; <br />
DT.MaximumErrorCount = 0; <br />
DT.FetchBufferSize = 1; <br />
DT.UseFastLoad=true; <br />
DT.InsertCommitSize = 0; <br />
DT.InsertCommitSize = 500000; <br />
DT.ExceptionFileColumnDelimiter = "|"; <br />
DT.ExceptionFileRowDelimiter = "\r\n"; <br />
DT.AllowIdentityInserts = false; <br />
DT.FirstRow = 0; <br />
DT.LastRow = 0; <br />
DTS.Transformation Trans = <br />
(DTS.Transformation)package.Tasks.New("DataPumpTransformCopy"); <br />
Trans.Name = "DirectCopyXform"; <br />
Trans.TransformFlags = 63; <br />
Trans.ForceSourceBlobsBuffered = 0; <br />
Trans.ForceBlobsInMemory = false; <br />
Trans.InMemoryBlobSize = 1048576; <br />
Trans.SourceColumns.AddColumn("TestField",1); <br />
<br />
<br />
Trans.DestinationColumns.AddColumn("TestField",1); <br />
DT.Transformations.Add(Trans); <br />
package.Tasks.Add(oTask); <br />
oCustomTask = null; <br />
oTask = null; <br />
<br />
<br />
} <br />
<br />
|
|
|
|
|
I was able to resolve this issue and thought I would post the solution so that others may benefit from it. The following example creates, saves, and executes a DTS package in C#. This example is setup to only DTS one field from one table but it can easily be modified to do a complete database.
This particular section of code gave me the most trouble so I thought I would point it out as well. My original code looked like this and would cause an invalidcastexception.
<br />
DTS.Task oTask = (DTS.Task)package.Tasks.New("DTSDataPumpTask");<br />
DTS.CustomTask oCustomTask = oTask.CustomTask;<br />
This was how I corrected it.
<br />
DTS.DataPumpTask2 oCustTask;<br />
DTS.Task oTask;<br />
oTask = pkg.Tasks.New("DTSDataPumpTask");<br />
oCustTask = (DTS.DataPumpTask2)oTask.CustomTask;<br />
Here is the entire example:
<br />
using System;<br />
using System.Drawing;<br />
using System.Collections;<br />
using System.ComponentModel;<br />
using System.Windows.Forms;<br />
using System.Data;<br />
using DTS = Microsoft.SQLServer.DTSPkg80;<br />
<br />
namespace MyDTSTest<br />
{<br />
public class Form1 : System.Windows.Forms.Form<br />
{<br />
private System.ComponentModel.Container components = null;<br />
private System.Windows.Forms.Button button1;<br />
public DTS.Package2Class pkg = new DTS.Package2Class();<br />
<br />
private void button1_Click(object sender, System.EventArgs e)<br />
{<br />
initpackage();<br />
}<br />
<br />
public void initpackage()<br />
{<br />
CreateConnections();<br />
CreatePackageSteps();<br />
DefinTasks(pkg);<br />
pkg.Name="MyCSharpDTSTest";<br />
pkg.Description = "CShart DTS Test";<br />
object MIA=System.Reflection.Missing.Value;<br />
pkg.SaveToSQLServer("MyServerName", "MyUserID", "MyPassword", <br />
DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default, "","","",ref MIA,false);<br />
pkg.Execute();<br />
pkg.UnInitialize();<br />
pkg = null;<br />
}<br />
<br />
public void CreateConnections()<br />
{<br />
<br />
DTS.Connection oConnection = (DTS.Connection)pkg.Connections.New("Microsoft.Jet.OLEDB.4.0");<br />
oConnection.Name ="Connection 1";<br />
oConnection.DataSource = "C:\\MySoureDB.MDB";<br />
oConnection.ID = 1;<br />
oConnection.Reusable = true;<br />
oConnection.ConnectImmediate = false;<br />
oConnection.ConnectionTimeout = 60;<br />
oConnection.UseTrustedConnection = false;<br />
oConnection.UseDSL = false;<br />
pkg.Connections.Add(oConnection);<br />
oConnection = null;<br />
DTS.Connection oConnection2 = (DTS.Connection)pkg.Connections.New("SQLOLEDB");<br />
oConnection2.Name = "Connection 2"; <br />
oConnection2.ID = 2;<br />
oConnection2.Reusable = true;<br />
oConnection2.ConnectImmediate= false;<br />
oConnection2.DataSource= "MyServerName";<br />
oConnection2.UserID = "MyUserID";<br />
oConnection2.ConnectionTimeout = 60;<br />
oConnection2.Catalog = "MyDestDB";<br />
oConnection2.UseTrustedConnection = false;<br />
oConnection2.UseDSL = false;<br />
oConnection2.Password = "MyPassword";<br />
pkg.Connections.Add(oConnection2);<br />
oConnection2 = null;<br />
}<br />
<br />
public void CreatePackageSteps()<br />
{<br />
DTS.Step2 oStep = (DTS.Step2)pkg.Steps.New();<br />
oStep.Name = "Copying Data from myTableName";<br />
oStep.Description = "Copying Data from myTableName";<br />
oStep.TaskName = "Copying Data from myTableName";<br />
oStep.CommitSuccess = false;<br />
oStep.RollbackFailure = false;<br />
oStep.ScriptLanguage = "VBScript";<br />
oStep.AddGlobalVariables = true;<br />
oStep.CloseConnection = false;<br />
oStep.ExecuteInMainThread = true;<br />
oStep.IsPackageDSORowset = false;<br />
oStep.JoinTransactionIfPresent = false;<br />
oStep.DisableStep = false;<br />
oStep.FailPackageOnError = true;<br />
pkg.Steps.Add(oStep);<br />
oStep = null;<br />
<br />
}<br />
<br />
public void DefinTasks(DTS.Package2Class package)<br />
{<br />
DTS.DataPumpTask2 oCustTask;<br />
DTS.Task oTask;<br />
oTask = pkg.Tasks.New("DTSDataPumpTask");<br />
oCustTask = (DTS.DataPumpTask2)oTask.CustomTask;<br />
oCustTask.Name = "Copying Data from myTableName";<br />
oCustTask.Description = "Copying Data from myTableName to MyDestDB.myTableName";<br />
DTS.DataPumpTask2 oDataPump = (DTS.DataPumpTask2)oTask.CustomTask;<br />
oDataPump.SourceConnectionID = 1;<br />
oDataPump.SourceSQLStatement = "SELECT `MyField` FROM myTableName";<br />
oDataPump.DestinationConnectionID =2;<br />
oDataPump.DestinationObjectName = "myTableName";<br />
oDataPump.ProgressRowCount = 1000;<br />
oDataPump.MaximumErrorCount = 0;<br />
oDataPump.FetchBufferSize = 1;<br />
oDataPump.UseFastLoad=true;<br />
oDataPump.InsertCommitSize = 0;<br />
oDataPump.InsertCommitSize = 500000;<br />
oDataPump.ExceptionFileColumnDelimiter = "|";<br />
oDataPump.ExceptionFileRowDelimiter = "\n\r";<br />
oDataPump.AllowIdentityInserts = false;<br />
oDataPump.FirstRow = 0;<br />
oDataPump.LastRow = 0;<br />
CreateTaskTrans(oDataPump, oCustTask);<br />
pkg.Tasks.Add(oTask);<br />
oCustTask = null;<br />
oTask = null;<br />
<br />
}<br />
public void CreateTaskTrans(DTS.DataPumpTask DatPump, DTS.DataPumpTask2 CustTask)<br />
{<br />
DTS.Transformation2 oTransformation;<br />
oTransformation = (DTS.Transformation2)CustTask.Transformations.New("DTS.DataPumpTransformCopy");<br />
oTransformation.Name = "DirectCopyXform";<br />
oTransformation.TransformFlags = 63;<br />
oTransformation.ForceSourceBlobsBuffered = 0;<br />
oTransformation.ForceBlobsInMemory = false;<br />
oTransformation.InMemoryBlobSize = 1048576;<br />
oTransformation.SourceColumns.AddColumn("MyField",1);<br />
oTransformation.DestinationColumns.AddColumn("MyField",1);<br />
DatPump.Transformations.Add(oTransformation);<br />
<br />
}<br />
}<br />
}
|
|
|
|
|
How can i read XML from a string into the XmlTextReader class?
|
|
|
|
|
|
I asked the question friday, and am gettign to it today. The original question was:
I have two controls each of which have loops (we will call loop 1 and loop 2) that call a central function that sends and gets data via serial (we will call Communication function). Only one loop is to run at a time. The problem I am having is when the user requests loop 2 while loop 1 just started. Loop 2 alerts loop 1 to stop, but if loop 1 just started, it will still be calling the communication function until it finishes.
I hope this is makeing sense...
Meanwhile, loop 2 has started calling communication function as well and I am getting overlap. I cannot simple set a bit and exit the loop at the end. (It is a big program so you will just have to trust me.)
Is there a way to cache the values needed to be sent to the communications function?
Is there a clean way to exit a loop without it finishing?
Should I be focussing on trying to make the two (in reality 10) different loops NEVER call until all other loops are inactive, or should I be trying to make the communication function able to handle multiple calls?
Peter V. mentioned Mutex which I tried and is not working. I believe it is not working because each loop is creating a new instance of the Communication function. But is this were true, wouldn't the program treat each instance seperately. Thanks again in advance.
*****************
"We need to apply 21st-century information technology to the health care field. We need to have our medical records put on the I.T." —GW
|
|
|
|
|
I guess making the Communication method static with Mutex applied to it should solve the problem.
This will ensure other threads will be blocked until the Communication function exits.
As faar as exiting the loop without it finishing, the cleaner method will be pinvoke.
Guess it helps.
Live Life King Size
Alomgir Miah
|
|
|
|
|
Sorry for the delay. I have been woring on the Mutex/ lock idea and almost have it working. I am intrigued however by the PInvoke method. Can you let me know what this is? I have found little information about it, and how it would apply to exitting a loop is escaping me.
Thanks,
Dwayne
*****************
"We need to apply 21st-century information technology to the health care field. We need to have our medical records put on the I.T." —GW
|
|
|
|