string in LPARAM

Hello

I Use PostMessage to broadcast a WindowsMessage. I want to post a string, but it seems like I can only post integers.

I try this:

char test[] = "abc";
PostMessage(HWND_BROADCAST, 49888, 2, test);             //Errormessage: cannot convert parameter 4 from 'char [4]' to 'LPARAM'

But it dowsnt work.

How do i send a string in the LPARAM?

Please help
sk-manAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

SteHCommented:
You need to allocate space on the heap to be able to post the pointer:

char* test = new char[10];
strcpy (test, "abc");
PostMessage (..., (LPARAM) test);

and be sure to delete [] the memory in the handler of the message!

Caveat: this ony works inside a process. HWND_BROADCAST doesn't really make sence in that case. Outside the scope of the process the memory location is invisible.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
sk-manAuthor Commented:
Well now i don't get the error, but it still doesn't work.

I do this in a c++ dll:
------------------------
char* test = new char[10];
strcpy (test, "abc");
PostMessage(HWND_BROADCAST, 49888, 2, (LPARAM)test);



In a C# form i have the WinProc function where i catch the message:
-------------------------------------------------------------------------------
string test = m.LParam.ToString();


This gives me "60107080" which looks like a ptr. address to me.
0
andrewjbCommented:
It is a pointer address, and it's only valid within the same process as you post the message (as SteH said).

You can't pass strings over directly. You have to pass some form of handle or pointer, and have the string stored elsewhere.
0
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

sk-manAuthor Commented:
OK, so I'll figure something else out.
0
SteHCommented:
A CMemFile could be a solution. Since it is in memory it is fast and can be used across process boundaries.
0
jkrCommented:
If you want to send strings, use 'WM_COPYDATA':

COPYDATASTRUCT cs;

ZeroMemory ( &cs, sizeof ( cs));

char test[] = "abc";
cs.cbData = strlen ( test);
cs.lpData = ( LPVOID) test;

SendMessage ( HWND_BROADCAST, WM_COPYDATA, <handle of your window>, (LPARAM) &cs);
0
jkrCommented:
BTW, see also http://codeguru.earthweb.com/win32/ipcdemo.shtml on this issue.
0
AgariciCommented:
you  can also look at this problem from this point of view: why pass the string to the other process? let the other process get the string when it nedds it. so you can simply export a function from your c++ dll that will get the desired string and call that function from c# form. if you want all processes to access the same value of the string, put it in a 'shared' section of your dll

A.
0
tinchosCommented:
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

Split: SteH {http:#9825676} & jkr {http:#9825791}

Please leave any comments here within the next seven days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

Tinchos
EE Cleanup Volunteer
0
jkrCommented:
Um, actually "WM_COPYDATA" is the only way to send strings across process boundaries using windows messaging.
0
tinchosCommented:
Sorry jkr

Maybe I'm not quite familiar with this topic in particular, but I thought that Steh's comments should also be awarded some points.

However, mine is just a recommendation, post yours and moderators will decide when they come to close it.

Cheers

Tincho
0
jkrCommented:
Hum, then, to be blunt: I *think* I was closest to the requested solution (using messaging)
0
SteHCommented:
@jkr,
you are right. You gave the correct answer to the question. Mine could be at most interpreted as a hint how it can be solved in another way. Sometimes one is looking for a solution the way one is ued to. And one is not aware that there are other possiblities available.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.