|
This might have something to do that UDP Messages get broken up into different UDP Packets.
For example, the message
"Hi, I am a UDP message and I maybe get transmitted as multiple UDP packets"
might be transmitted as
"Hi, I am a UDP mes"
"sage and I maybe get transmitted as multiple U"
"DP packets"
Due to this you might need to read packets until you KNOW that the message has ended, e.g. by using a fixed message length or a defined control character marking the end of the message.
To answer your question: Your socket will remain blocked until the whole message (= every data packet) is received, but you can avoid a block of your whole program by using a separate thread for your socket.
Veni, vidi, caecus | Everything summarizes to Assembly code
|
|
|
|
|
Thanks, can you give a small code example?
|
|
|
|
|
That depends on which framework you will use.
Are you using .Net? MFC? Native C++? Qt?
Veni, vidi, caecus | Everything summarizes to Assembly code
|
|
|
|
|
You just need to create a loop that repeats the recv call untill there is no more data.
Veni, vidi, abiit domum
|
|
|
|
|
Thanks, I'll give it a shot.....
|
|
|
|
|
Hey there,
I have a bitmap header information in the struct
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO
The total size of this is 1080.
Now i want to convert this into a unsigned char pointer.
unsigned char * pBMPHeaderData;
I already got the raw image data in another unsigned char buffer.
unsigned char* pRawBMPData;
Now i want to make a complete BMP image by adding the header info and raw data into a new unsigned char pointer. For this i need to convert the BITMAPINFO struct into a unsigned char *
So the new buffer will be,
unsigned char * pCompleteBMPIMageData = pBMPHeaderData + pRawBMPData;
Can anyone tell me how to do this?
Thanks in advance.
|
|
|
|
|
|
What do you mean by "i want to convert this into a unsigned char pointer."? A pointer is merely the address of some block of memory, you do not convert things into pointers. Procedurally to combine the two blocks into a new BMP you need to do the following:
PBYTE pCompleteBMPIMageData = new BYTE[size of header plus size of raw data];
memcpy(pCompleteBMPIMageData, reinterpret_cast<PBYTE>(&BITMAPINFO), sizeof BITMAPINFO);
memcpy(pCompleteBMPIMageData + sizeof BITMAPINFO, pRawBMPData, size of raw data);
Veni, vidi, abiit domum
|
|
|
|
|
The reason why i want to get the BITMAP Info structure in a unsigned char pointer is because i want to convert that into a base64 encoded string.
So it's not about converting a structure into a unsigned char pointer. I want the data in the structure to be populated in a unsigned char pointer so that it could be later used to generate a base64 encoded string for the bitmap image.
|
|
|
|
|
Well if you use my suggested code, that is what you will get.
Veni, vidi, abiit domum
|
|
|
|
|
Richard gave you the right suggestion, then. The only trick part is computing the size of the raw data (you may find sample code at MSDN[^]).
Please note, as workaround, you could directly encode the whole BMP file (if you have it) content in Base64 .
Veni, vidi, vici.
|
|
|
|
|
Hello,
I have a C# dll (COM) which contains API which have a parameter like below :
[type: ComVisible(true)]
[Guid("66F046BC-D97C-4CF2-96B5-01E66329FC65")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICDBrowserServiceMgr
{
[DispId(15)]
void Initialize(SeeSPMPLMClientLib.TSeeSPMPLMClient A_pClient);
...}
Now I need to integrate this dll in MFC application
So I put the import directive
#import "SeeSPMPLMClient.dll"
#import "My_dll.tlb"
after i do
My_Dll_Namespace::ICDBrowserServiceMgrPtr m_pICDBrowser;
SeeSPMPLMClientLib::ISeeSPMPLMClientPtr m_pPLMClientMgr;
m_pICDBrowser->Initialize(m_pPLMClientMgr);
I ahve the error :
error C2664: 'My_Dll::ICDBrowserServiceMgr::Initialize' : cannot convert parameter 1 from 'SeeSPMPLMClientLib::ISeeSPMPLMClientPtr' to 'My_Dll_Namespace::ISeeSPMPLMClient *'
Any idea please ?
modified 10-Jan-14 4:34am.
|
|
|
|
|
khaliloenit wrote: Any idea please ? As the message says, you cannot pass a SeeSPMPLMClientLib::ISeeSPMPLMClientPtr to a method that expects a My_Dll_Namespace::ISeeSPMPLMClient * . Check the documentation and the header files to see exactly what you should be passing across.
Veni, vidi, abiit domum
|
|
|
|
|
as you see above
the API take as parameter the same type which I pass from C++ !!!
|
|
|
|
|
Er, No; otherwise the compiler would not be producing that error message.
Veni, vidi, abiit domum
|
|
|
|
|
this is cant be caused by ambiguity of namespaces ?
i.e : if this type is used in C# dll and after passed from other project which use same type we have ambiguity of Type ?
|
|
|
|
|
As I said before, you need to look at the .tlb and .h files to check exactly what object you should be passing.
Veni, vidi, abiit domum
|
|
|
|
|
m_pICDBrowser is a variable of a type defined in the namespace My_Dll_Namespace , therefore the method Initialize is also defined in that namespace, and, according to the compiler error message, expects an argument of pointer to a type that's also defined in that namespace.
You however pass an argument that's defined in an entirely different namespace, SeeSPMPLMClientLib - it's a different type.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
As you see above I pass the same type :
public interface ICDBrowserServiceMgr
{
[DispId(15)]
void Initialize(SeeSPMPLMClientLib.TSeeSPMPLMClient A_pClient);
...}
and in call
SeeSPMPLMClientLib::ISeeSPMPLMClientPtr m_pPLMClientMgr;
m_pICDBrowser->Initialize(m_pPLMClientMgr);
|
|
|
|
|
You're missing my point. Check the type of
m_pICDBrowser ! the function
Initialize() you are calling here is not the one you think you are calling!
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
Not understand , please can you explain more ?!!
|
|
|
|
|
Maybe it's best you take another look at the error message you got. In the line
m_pICDBrowser->Initialize(m_pPLMClientMgr);
the error message states that it cannot convert the first parameter in the call (m_pPLMClientMgr to the type that the function expects.
According to the error message, the type of m_pPLMClientMgr is SeeSPMPLMClientLib::ISeeSPMPLMClientPtr , but the type it expects is My_Dll_Namespace::ISeeSPMPLMClient * .
This implies, that you have a type ISeeSPMPLMClientPtr defined somewhere in namespace SeeSPMPLMClientLib , but it is not defined as the required type My_Dll_Namespace::ISeeSPMPLMClient * .
I suspect that you mixed up the two namespaces. Maybe you inserted a using namespace somewhere (always a bad idea), and then you no longer saw what namespace the definitions and types refer to, or maybe you just have a wrong type definition.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
i have program and i believe that it works fine under debug mode, the program does not have memory leak or any other leaks, what happened that i switched to release mode, and somehow i see weird problems showing up
1- the free and calloc work fine but sometime the program crash tells me a heap corruption issue, where as each pointer is checked, when i look at task manger the program works with regular around 10mg, but somehow it gets increased to 1gb1! and this happens after the crash
2- when i use openfile function the api one, it works fine then somehow the window gets busted? such lists or prarts from openfile disperse?
i do not believe it's related to uninitialized data cuz all the variables are initialized even the pointers
i did check with all leak tools and non of them show memory leak, i did see access violation but it's also handled with exceptions
i do not understand why it's still crashing whereas i checked everything? any ideas or similar issues?
|
|
|
|
|
Given how little you have told us about how you handle the data or even what the program does, it's really hard for us to say what is wrong.
It is possible that you simply keep creating objects and adding them to a list, which has functionality for deleting all the objects when the list is destroyed. If that is the case, you don't have memory leaks, you just don't release memory until the program shuts down. You mention that you don't see failures in the debug build, but that could be because the release build is able to allocate objects at a much higher rate than the debug build.
Like I said, this is just one possibility.
Soren Madsen
"When you don't know what you're doing it's best to do it quickly" - Jase #DuckDynasty
|
|
|
|
|
thanks for your time,
which has functionality for deleting all the objects when the list is destroyed. If that is the case, you don't have memory leaks, you just don't release memory until the program shuts down
can you explain what does release memory mean? i know that free it does release the memory, and yes i do have one array it's 2d char pointer array...
|
|
|
|