|
This should probably have gone in the C++/CLI forum...but I'll answer it here.
Is there a reason that you want to use the MSXML parser? If you're compiling for .NET, then you may want to switch the parser to using the .NET Framework's System.Xml namespace. The System.Xml.XmlNodeReader or XmlTextReader objects will give you a SAX interface to the Xml that you've got. Or you could try the DOM interface with the XmlDocument object.
And no, your interpreter code doesn't need to be changed. You'll want to investigate Mixed Mode assemblies. This will enable you to run part of your code as MSIL on the .NET runtime and part of it in unmanaged/native mode.
The hardest part is just going to be getting used to the .NET platform. And maybe the funky syntax for the MC++ code.
Picture a huge catholic cathedral. In it there's many people, including a gregorian monk choir. You know, those who sing beautifully. Then they start singing, in latin, as they always do: "Ad hominem..."
-Jörgen Sigvardsson
|
|
|
|
|
Hello,
i'm using SendMessage winapi function in my program like this:
<br />
[DllImport("user32.dll", SetLastError=true, EntryPoint="SendMessage", CharSet=CharSet.Auto)]<br />
public static extern IntPtr SendMessage(<br />
IntPtr hWnd, <br />
[MarshalAs(UnmanagedType.U4)] int Msg, <br />
long wParam, <br />
int lParam);<br />
So i'm executing it and i want to use the returned value. But it seems that the returned value is a pointer. How can i get the value?
The code is like this:
<br />
IntPtr hWnd = FindWindow("Winamp v1.x", null);<br />
IntPtr lResult = SendMessage(hWnd, WM_WA_IPC, 0, IPC_GETEQDATA);<br />
-- modified at 9:38 Thursday 6th October, 2005
|
|
|
|
|
Hmm, may be the problem isn't in the returned type. But when i try this code in c++ it is working and the return value is correct, but in .NET i'm always receiving 20496
|
|
|
|
|
I found my problem. It is in the SendMessage declaration. The parameters should be IntPtr instead long and int:
<br />
[DllImport("user32.dll", SetLastError=true, EntryPoint="SendMessage", CharSet = CharSet.Auto)]<br />
public static extern IntPtr SendMessage(<br />
IntPtr hWnd, <br />
[MarshalAs(UnmanagedType.U4)] int Msg,<br />
IntPtr wParam,<br />
IntPtr lParam);<br />
|
|
|
|
|
Small correction:
You _can_ use int.
The only thing that was causing troubles was the long declaration, since longs in .NET are 8 byte and not 4 like WPARAM.
Oh, and the [MarshalAs...] declaration is superfluous, btw.
Regards,
mav
|
|
|
|
|
My application runs as a tray application. And I want it to be able to capture the play/pause, next and previous buttons on my Microsoft Natural Keyboard. Anybody have a suggestion on how to do this??
|
|
|
|
|
Hi guys
ArrayList objArrayList=new ArrayList();
objArrayList.Add("a");
we are adding values through Add property but i want to add value same as array so plz tell me how it is possible?
int[] onjAr=new int[]{1,2,3,4,5,6,7,8,9};
can i add value in this format e.g- {1,2,3,4,5,6,7,8,9}
|
|
|
|
|
The following should work:
ArrayList objArrayList = new ArrayList();
objArrayList.AddRange(new int[]{1,2,3,4,5,6,7,8,9});
www.troschuetz.de
|
|
|
|
|
how can i convert aspx pages to HtML pages. please help me out. if there is any tool available for that please let me know.
Amit Grover
Amit Grover
CDAC R&D
Gist Group
pune
|
|
|
|
|
Most browsers let you save the html code of a page.
If you need to do this programatically, use a WebRequest to get the pages, and just save the response string.
---
b { font-weight: normal; }
|
|
|
|
|
Hi,
I'd like to execute a program from within my class; how can I do this ?!?
Regards,
Stefan
|
|
|
|
|
Take a look at the Process[^] class.
The easiest way to execute a program is using its static Start method:
Process.Start("IExplore.exe"); or
Process.Start("IExplore.exe", "www.northwindtraders.com");
www.troschuetz.de
|
|
|
|
|
Ok, danke!
|
|
|
|
|
http://www.codeproject.com/csharp/start_an_external_app.asp
Easy, isn't it?
Gruß
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Easy, but hard to find... Thx!
|
|
|
|
|
hello .
plze tell me how to get the target (source) of shortcut in c# code.
thanks.
|
|
|
|
|
The easiest way is to create a Runtime-Callable Wrapper (RCW) using tlbimp.exe from the .NET Framework SDK from shell32.dll. This contains the automation objects that you can use with managed code via the RCW.
To do this, run the following
tlbimp /out:Interop.Shell32.dll /namespace:Microsoft.Interop.Shell32.dll shell32.dll You can then write code similar to the following using the Folder , FolderItem and ShellLinkObject classes:
using System;
using System.IO;
using Microsoft.Interop.Shell32;
class ShellLink
{
const int ERROR_SUCCESS = 0;
const int ERROR_FILE_NOT_FOUND = 2;
const int ERROR_PATH_NOT_FOUND = 3;
const int ERROR_INVALID_PARAMETER = 87;
const string OUTPUT_FORMAT = "{0} -> {1}";
static int Main(string[] args)
{
string directory, name = null;
switch (args.Length)
{
case 0:
directory = Environment.CurrentDirectory;
break;
case 1:
directory = args[0];
if ((directory[0] == '/' || directory[0] == '-') &&
(directory[1] == '?' || directory[1] == 'h'))
{
Usage(Console.Out);
return ERROR_SUCCESS;
}
directory = Path.Combine(Environment.CurrentDirectory, directory);
break;
case 2:
directory = args[0];
name = args[1];
break;
default:
Console.Error.WriteLine("Error: invalid number of parameters.");
Usage(Console.Error);
return ERROR_INVALID_PARAMETER;
}
ShellClass shell = new ShellClass();
Folder folder = shell.NameSpace(directory);
if (folder != null)
{
if (name != null)
{
FolderItem item = folder.ParseName(name);
if (item != null)
{
DisplayLink(item);
}
else
{
Console.Error.WriteLine("Error: file not found.");
return ERROR_FILE_NOT_FOUND;
}
}
else
{
foreach (FolderItem item in folder.Items())
{
DisplayLink(item);
}
}
}
else
{
Console.Error.WriteLine("Error: directory not found.");
return ERROR_PATH_NOT_FOUND;
}
return ERROR_SUCCESS;
}
static void DisplayLink(FolderItem item)
{
IShellLinkDual link = null;
if (item != null)
{
if (item.IsLink)
{
link = (IShellLinkDual)item.GetLink;
if (link != null)
{
Console.WriteLine(OUTPUT_FORMAT, item.Name, link.Path);
}
}
}
}
static void Usage(TextWriter writer)
{
if (writer != null)
{
writer.WriteLine("Usage: {0} [directory [name]]",
Path.GetFileName(Environment.GetCommandLineArgs()[0]));
writer.WriteLine();
writer.WriteLine("\tdirectory Path to a directory.");
writer.WriteLine("\t If not specified, the current directory is used.");
writer.WriteLine("\tname The name of a single shell link.");
writer.WriteLine("\t If not specified, all links are displayed.");
}
}
}
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Customer Product-lifecycle Experience
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hi all,
Here is the scenario i have 3 database table 1.lcsh 2.sub 3. terms
i need to write a select query which will fill datatable let say we get multiple record in that multi record i will take 1 value say lcshid from lcsh with this lcshid and again run another select query for database table 2.sub, we get multi rec and again taking 1 value from say nid from sub with this nid field again running another select query for datbase table 3.terms and finally select the fields which should be display in XSLT... this execrise is for mapping two fields this is my code snippet...
objTempNodes = objXml.SelectNodes("//dc:Subject",objNameSpaceMgr);
sData[5] = "";
foreach (Xml objNode in objTempNodes)
{
foreach(XmlAttribute ElementAttr in objNode.Attributes)
{
if (ElementAttr.Value=="dcterms:LCSH")
{
SubjectLCSH=objNode.InnerText;
if(SubjectLCSH.Trim()!="")
SubjectLCSH = RemoveDups(SubjectLCSH);
objNode.InnerText = SubjectLCSH;
}
if (ElementAttr.Value=="dcterms:DLTaxonomy")
{
try
{
//Select the record in db in LCSH Terms
SqlConnection conn = new SqlConnection();
conn.ConnectionString = new SqlConnection(Global.sConnectionString);
conn.Open();
sqlAdapter = new SqlDataAdapter();
sqlAdapter.SelectCommand = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
//Building the query for Selecting record From the SubjectTermsMapping
da = "Select " + ConfigurationSettings.AppSettings["connstrsubjmapping"] + " where DDC ='" + strDDC + "'";
sqldataset ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0];
}
catch
{
//SubjectDL = "Final Value";
//End Here
objNode.InnerText = SubjectDL;
}
finally
{
sData[5] = "NLBTerms:~LCSH:" + SubjectLCSH + "~DLTaxonomy:" + SubjectDL + "~SASH:";
}
}
}
suggest me how to do the above mention query i need to check the condition of each field ex:lcshid is avaiable r not if no then it should not move to next query...
Regards
ybasha
|
|
|
|
|
First, you do not need to open a connection when using a DataAdapter derivative. The DataAdapter will open and close the connection as necessary.
Second, to avoid connecting back to the server multiple times - and for large data sets this could require a tremendous amount of time on the user's part and lots of bandwidth on your server - have SQL Server do the work using joins like the following example:
select o.* from Orders o left outer join Customers c on o.CustomerID = c.CustomerID Third, you can implement relationships in your DataSet between DataTable s using a DataRelation . In Visual Studio, if you add a new DataSet class to your project you can import these tables from Server Explorer (or author them yourself, but this takes more time and is prone to error) then draw relationships between fields from different tables. This creates the DataRelation for you. Be sure to look at the code to see how it's done, or read the documentation[^] for the class for an example.
Your SqlCommand for your SqlDataAdapter then should have two SQL statements in one command to fill each table (separated by a semicolon) or swap the SqlDataAdapter.SelectCommand with second command and fill the same table with a different table mapping (the previous data would be saved).
Then you'd have a DataSet with everything you need already with only a one (or two, if you do the latter suggestion of a second command and calling DataAdapter.Fill again) connection to the server. This would be a much more efficient use of network bandwidth and the database server that is designed to handle this sort of query.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Customer Product-lifecycle Experience
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hi there,
I am using C#. I have to create a random unique identifier that will be used as a primary key in my table. I created a string array dynamically that contains all upper case letters, and numbers 0-9 like this:
private ArrayList m_arrCharPool;
private string m_sExcludeChars = "IO01";
In the constructor I initialise my array:
m_arrCharPool = new ArrayList();
// Clear the array
m_arrCharPool.Clear();
// If required, include uppercase letters A thru Z
if(m_bIncludeLetters)
{
for(int i = 65; i < 91; ++i)
{
m_arrCharPool.Add(Convert.ToChar(i).ToString());
}
}
// If required, include numbers 0 thru 9
if(m_bIncludeNumbers)
{
for(int i = 48; i < 58; ++i)
{
m_arrCharPool.Add(Convert.ToChar(i).ToString());
}
}
So basically my array looks something like this:
"A", "B", "C".... "7", "8", "9"
No you will see I create a string variable called m_sExcludeChars. This variable represents all the characters that are not allowed in the array. So now I need to loop through the m_arrCharPool array, and search for each character in m_sExcludeChars, and delete that array element totally from the array.
My loop is something like this, but I know it is wrong. Can someone please help me with my loop so that it performs correctly. If I can do this whole process differently, please let me know:
// Remove the following characters from the array: I, O, 0, 1
for(int i = 0; i < m_arrCharPool.Count; ++i)
{
foreach(char j in m_sExcludeChars)
{
if(m_arrCharPool.IndexOf(j))
{
m_arrCharPool.RemoveAt(i);
}
}
}
Regards,
Brendan
|
|
|
|
|
The problem with your loop is that you are looping through an array and deleting elements from it within the loop. Copying the contents into another array, deleting elements from it and then reassigning this copied array to the original array should do the trick.
ArrayList copyOfCharPool = new ArrayList(m_arrCharPool);
for(int i = 0; i < m_arrCharPool.Count; ++i)
{
foreach(char j in m_sExcludeChars)
{
if(copyOfCharPool.IndexOf(j))
{
copyOfCharPool.RemoveAt(i);
}
}
}
m_arrCharPool = copyOfCharPool;
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
Thanks for the reply.
Correct me if I am wrong, but it looks almost exactly like my code. What you are doing is to assign my original to a copy array, looping through the copy array, removing the elements, and then assigning the copy array back to the original array. I don't think my way works, but isn't it longer doing it your way? Why can't you do it my way?
|
|
|
|
|
ma se wrote:
looping through the copy array,
No I didn't, I looped through the original array and that's the key to this problem. Like I said in my earlier post, looping through a collection and deleting elements from it at the same time will not work correctly.
int []a = new int[]{1,2,3,4,5,6,7,8,9, 10};
ArrayList arrayList = new ArrayList(a);
for (int i = 0; i<arrayList.Count; ++i)
arrayList.RemoveAt(i);
How many times do you think the loop will run? It won't run 10 times, most probably will run 5 or 6. In fact, if you use the foreach statement instead of for to loop, you'll get an exception stating that you can't modify the collection when enumerating over it.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
Thanks
I will try it out at home and get back to you tomorrow.
You sure the loop in the first reply will work 100%? So I will be left with (36-4) elements?
B
|
|
|
|
|
Why not just use a string that contains all available characters?
const string chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
---
b { font-weight: normal; }
|
|
|
|
|