|
eyalbi007 wrote: Maybe the reason is that each one of the applications (C# and C++) uses different memory space
You're absolutely right! I'm an idiot
Sorry about that - I totally spaced on the inter-process
requirement.
Looks like oobimoo showed you a solution.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
You must use the WM_COPYDATA msg
in the c# proj declare the following
[StructLayout(LayoutKind.Sequential)]
struct CopyDataStruct
{
public IntPtr dwData;
public int dataSize;
public IntPtr data;
}
enum WinMessage
{
WM_COPYDATA = 0x4A
}
class NativeAPI
{
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, WinMessage msg, IntPtr wParam, IntPtr lParam);
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string className, string windowName);
}
and when you press a button for example
private void button1_Click(object sender, EventArgs e)
{
string s = "This is a message from sharp";
IntPtr hCWindow = NativeAPI.FindWindow("RECIEVE_DATA", "Recieve_Data");
byte[] tmpStringData = System.Text.Encoding.Unicode.GetBytes(s);
byte[] stringData = new byte[tmpStringData.Length + 2];
Array.Copy(tmpStringData, stringData, tmpStringData.Length);
stringData[stringData.Length - 2] = stringData[stringData.Length - 1] = 0;
CopyDataStruct cds = new CopyDataStruct();
cds.dwData = IntPtr.Zero;
cds.dataSize = stringData.Length;
GCHandle gch_data = GCHandle.Alloc(stringData, GCHandleType.Pinned);
cds.data = gch_data.AddrOfPinnedObject();
GCHandle gch_cds = GCHandle.Alloc(cds, GCHandleType.Pinned);
NativeAPI.SendMessage(hCWindow, WinMessage.WM_COPYDATA, this.Handle, gch_cds.AddrOfPinnedObject());
gch_data.Free();
gch_cds.Free();
}
and in the windowproc of the native app
case WM_COPYDATA:
{
PCOPYDATASTRUCT pcds = (PCOPYDATASTRUCT)lParam;
MessageBox(0, (LPCTSTR)pcds->lpData, _T("CopyData message"), 0);
}
break;
The windowclass name is "RECIEVE_DATA" and the window name is "Recieve_Data" (for use with the find file in c#, although windowclass name may be null)
The default charset for my configuration is unicode. You must use ASCII encoding to get the bytes of the string in the c# code, otherwise
modified on Monday, August 25, 2008 9:39 AM
|
|
|
|
|
Hi oobimoo,
Thanks for you reply.
The C# part works fine, however, at the C++ side I can retrieve only the first character of the string ((LPCTSTR)pcds->lpData equals to "T"). I tried some other castings (string and char*) but I only get the first character.
Any ideas?
Thanks!
Eyal.
|
|
|
|
|
Your encoding at the c++ side is ascii. As i mentioned you must use the
System.Text.Encoding.ASCII.GetBytes(s) instead of the unicode that i use in my example.
|
|
|
|
|
Dear oobimoo,
Indeed, now it works. However, I'm still concerned about something: if I'm getting this correctly, the calls gch_data.Free() and gch_cds.Free() are responsible for freeing the pinned memory.
However, what if the receiving side didn't get the information before this release? Isn't it better to (somehow) release this pinned memory at the receiving side?
Consider the following chain of events:
1. Sending the message at C# application.
2. Receiving the message at the C++ application, but right before extracting the sent string:
3. Context switch at the C++ application.
4. The C# application releases the pinned memory.
5. Context switch back to the C++ application. The pinned memory is released and we can't extract the string message.
Or maybe these can't happen since SendMessage is blocking?
Thanks!
|
|
|
|
|
Your are welcome
From the msdn (WM_COPYDATA) :
"The receiving application should consider the data read-only. The lParam parameter is valid only during the processing of the message. The receiving application should not free the memory referenced by lParam. If the receiving application must access the data after SendMessage returns, it must copy the data into a local buffer. "
From the msdn (SendMessage) :
"The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message. "
modified on Monday, August 25, 2008 1:08 PM
|
|
|
|
|
|
I am attempting to retrieve a web page through StreamReader (using HttpWebRequest and HttpWebResponse).
The issue is that the process is getting redirected to a webpage indicating that "JavaScript enabled" is not detected. Is there a parameter within the HttpWebRequest that notifies the target website that javascript is indeed enabled?
Thank you in advance.
|
|
|
|
|
You have to set the correct headers when sending the request, so that the server identifies the request as coming from a specific browser. The HTTP_USER_AGENT value contains the string that identifies the browser.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
I just found a new search engine for dot net developers. This search engine uses Google Custom Search Engine technology to provide dramatically improved search results for software developers using VB.NET, C#, ASP.NET and other .NET technologies. It searches only the best of sites having quality dot net related content.
http://tips.developersvoice.com/devsearch
I personally find it very useful. Try it yourself it is a great time saver.
Regards
Brij Kishore
TCS (INDIA)
|
|
|
|
|
Thanks For sharing nice
Vuyiswa Maseko,
Sorrow is Better than Laughter, it may Sadden your Face, but It sharpens your Understanding
VB.NET/SQL7/2000/2005
http://vuyiswamb.007ihost.com
http://Ecadre.007ihost.com
vuyiswam@tshwane.gov.za
|
|
|
|
|
Thanks for sharing. 5 from me
|
|
|
|
|
Nice search engine.Thanx
Cheers!!
Brij
|
|
|
|
|
For general programming searches (besides the CodeProject ), try Krugle[^].
Regards,
Thomas Stockwell
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Visit my Blog
|
|
|
|
|
Nice, but I'll stick to google
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
"Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham
|
|
|
|
|
Check this it seems more better then google (but I don't think so,I stick again google too)
http://www.cuil.com/info/[^][^]
I Love T-SQL
"Don't torture yourself,let the life to do it for you."
|
|
|
|
|
That one bites. Looked at it, and will stick with google
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
"Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham
|
|
|
|
|
It worth to use it (www.cuil.com) time by time,why not.
I Love T-SQL
"Don't torture yourself,let the life to do it for you."
|
|
|
|
|
Blue_Boy wrote: It worth to use it (www.cuil.com) time by time,why not.
Because, and not to labour too fine a point here, IT SUCKS.
One of the reasons people like google is because it's simple and the interface is clean.
This interface, redefines suckyness to a power of 100. It's like somebody took suck at school and decided to become the Emeritus Professor of Suck. I don't care how clever the freakin' interface is - if I can't get to the information I need within a minute then you haven't helped me you steamin' pile of suckin' interface. Perhaps we could coin a new word for it - the SUCKIFACE.
|
|
|
|
|
Pete O'Hanlon wrote: not to labour too fine a point here, IT SUCKS
Amen to that. I recall someone posting a link to the said search engine in the Soapbox, it got poor review, and, well, let's just leave it at that
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
"Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham
|
|
|
|
|
Blue_Boy wrote: worth to use it (www.cuil.com) time by time,why not
It is really lame, I've tried some of the typical search strings I use in google, and cuil's search results just really bite badly.
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
"Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham
|
|
|
|
|
Sounds nice ... but if the interface with a fewer lines of text but nice ... thanks for sharing it !
Sincerely Samer Abu Rabie
Note: Please remember to rate this post to help others whom reading it.
|
|
|
|
|
What a steaming pile of crud this site is. It's too busy, and too complicated - it's simpler to use Google (and a lot cleaner). By your length of time on this site, I'd have to say you were spamming us.
|
|
|
|
|
I would stick to Google, i think guy will earn dollars if we search on his site so i would stick to google only.
“You will never be a leader unless you first learn to follow and be led.”
–Tiorio
"Coming together is a beginning, staying together is progress, and working together is success." Henry Ford
|
|
|
|
|
Im trying to write a Notepad type application which doesn't have the 1024 characters per line restriction. does anyone have any ideas on how to allow a line limitless (or at least a very high number - 1000000) characeters?
any help would be great!!
|
|
|
|