I am new to COM. I have a DLL which is written in C. I want to make that DLL a COM dll. SO that i can register it and my application can use it. I tried google a lot. But not finding any satisfactory answer.
Please answer if you have any idea about how to achieve the said.
For what reason? You first need to diagnose what is happening in your code to cause the error. When you enter the critical section what are you trying to synchronise with?
void CVersion::ReadValue(BYTE *Buffer, int n_Length, int n_Source)
m_svalue = tempBuffer;
You are setting m_svalue to point to tempBuffer, but as soon as you exit this function that buffer will get released so the pointer is no longer valid. Looking at this code again I cannot see what useful purpose it serves.
Then you need to manage the lifetime of the string. If you pass it from one thread to another then you must ensure it is not deleted from its source until the destination has taken a secure copy. In your sample code your destination thread is taking a copy, but only into a temporary location which immeditely gets disposed. Assuming that m_svalue is a string pointer then you just need to allocate a buffer of the required size to it, and copy the message string across. You can then delete it at some later point.
Can you just give the sample code for the same.Because i tried ,but i am doing a small mistake somewhere.How will i store the string in a buffer so that it can be accessible from another class and use for updating the text.
I assume this is a threading problem. The code can probably be called from different threads (that's why you use a Critical Section), but the control text can only be set from the GUI thread.
The easiest way to achieve this is using a timer. So in the ReadValue() fucntion you only put the data into m_svalue. And in the OnTimer() function (which runs in GUI thread) you call Data(). This would of cource mean that you need to store the most recently used CClassVersion object somewhere.
The good thing about pessimism is, that you are always either right or pleasently surprised.
No, my function is not a Unicode function. my file path is C:\Downloads\HornSound.wav.
I found if I added the following " MessageBox(NULL, loct, "Message1", NULL); " before "CloseHandle(hThread);".
Both MessageBoxes (both in the function and in the thread) can correctly display the file path.
But if I removed "MessageBox" in the function, then the MessageBox in the thread cannot correctly display the file path. What is the problem?
The fact that it works when you add a delay suggests that the file path buffer is getting destroyed before the thread process has constructed the message box. You should ensure the buffer is preserved until the thread has finished using it, by some form of synchronisation. Or better still don't use threads unless they are serving some necessary function.