|
You can call a static method of a class from other cpp files!
You need to link the files however.
The problem is in your project - the linker isn't finding
the file with the function being called. Fix that and it
will work.
The two files in your example ARE in the same project, right?
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
yes all the files are incluceded in the same project.
how do I make sure the linker finds the file?
The thing is I can call myClass::myFunction() from one of the .cpp files in the project,
but I can't call it from another .cpp file in the same project. whats going on?
Thanks for your time
|
|
|
|
|
Why the low vote? Someone had a bad day. Perhaps. here[^] as well.
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche
.·´¯`·->Rajesh<-·´¯`·.
[Microsoft MVP - Visual C++]
|
|
|
|
|
Does anyone have a code that can read an image and transform the pixels to a 2d array. in C++?
I know this is something really common, but i can not find that code anywhere.
Thanks alot
|
|
|
|
|
|
Thanks for your reply..
Can CxImage be used on the windows mobile 6 platform?
|
|
|
|
|
Does anyone have a code that can read an image and transform the pixels to a 2d array?
I know this is something really common, but i can not find that code anywhere.
Thanks alot
|
|
|
|
|
I'm not going to write the code for you, but you could easily
use the CImage class to load the image.
Once the image is loaded, CImage::GetBits(), CImage::GetPitch(),
CImage::GetWidth(), CImage::GetHeight() can be used to copy the pixel
data to an array.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks..
Can CxImage be used on the windows mobile 6 platform?
|
|
|
|
|
I don't know anything about CxImage
CImage wraps a DIBSection and uses GDI+ for loading and saving images.
I'm not sure if those work on mobile platform, but the source code
is available to check...
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hello, I am writing an ActiveX plug-in now. One of the feature is that it can let the user download a file from the remote server.
The way of downloading files is sequentially now. It means no two files are downloaded at the same time.
I implement this feature by winsock and create another thread for transferring the file. (close thread when complete download)
The procedure is like : user query -> server return corresponding files -> user choose the file -> click download icon -> server and client create the socket -> start to transfer file.
I use the virtual PC to connect the html on my machine to test the download functionality.
But there is a strange problem now. The problem is that the program might be hanged in the accept() sometimes. (like waiting for a client connection, but the result of client connection is success...)
If this happens, the file can't be downloaded. If this doesn't happen, the file can be downloaded.
And the probability of this error is random...
The function socket(), bind(), listen(), connect() of winsock all return success and the closesocket() returns 0 too.
So I have no idea how to solve this problem now. Can someone give me a help or suggestion ?
The server transfer code is
BOOL CServer::SocketForDownload(int port, CString DirectoryPath)
{
m_iPort = port;
m_sDirectoryPath = DirectoryPath;
m_pDLThread = AfxBeginThread(DLThreadProc, this);
return SOCKET_OK;
}
UINT DLThreadProc(LPVOID pParam)
{
CServer *pNW = (CServer*)pParam;
SOCKET DLSocket;
SOCKADDR_IN DLAddr;
DLSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(DLSocket == INVALID_SOCKET)
{
}
int optval, rc;
optval = 1;
rc = setsockopt(DLSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&optval, sizeof(optval));
DLAddr.sin_family = AF_INET;
DLAddr.sin_port = htons(pNW->m_iPort);
DLAddr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(DLSocket, (SOCKADDR*) &DLAddr, sizeof(DLAddr)) == SOCKET_ERROR)
{
}
if (listen(DLSocket, 5) == SOCKET_ERROR)
{
}
int len;
SOCKET AcceptSocket;
while(TRUE)
{
len = sizeof(DLAddr);
AcceptSocket = SOCKET_ERROR;
while (AcceptSocket == SOCKET_ERROR)
{
AcceptSocket = accept(DLSocket, (SOCKADDR*) &DLAddr, &len);
if(AcceptSocket == INVALID_SOCKET)
{
}
}
DLSocket = AcceptSocket;
break;
}
shutdown(AcceptSocket, SD_SEND);
int returncode;
returncode = closesocket(AcceptSocket);
AfxEndThread(SOCKET_OK);
return SOCKET_OK;
}
The client transfer code is
BOOL CClient::SocketForUpload(char *ip, char *filepath)
{
m_sFilePath = filepath;
m_sIP = ip;
m_pULThread = AfxBeginThread(ULThreadProc, this);
return SOCKET_OK;
}
UINT ULThreadProc(LPVOID pParam)
{
CClient *pNW = (CClient *)pParam;
SOCKET DLSocket;
SOCKADDR_IN DLAddr;
if((DLSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
}
Sleep(500);
DLAddr.sin_family = AF_INET;
DLAddr.sin_port = htons(pNW->m_iPort - 1);
DLAddr.sin_addr.s_addr = inet_addr(pNW->m_sIP);
if(connect(DLSocket, (SOCKADDR *) &DLAddr, sizeof(DLAddr)) == SOCKET_ERROR)
{
}
shutdown(DLSocket, SD_SEND);
int returncode = closesocket(DLSocket);
AfxEndThread(SOCKET_CLOSE);
return SOCKET_OK;
}
The value of SOCKET_OK is an enum value
My environment is : Vista SP1 + VS2005 SP1, The virtual PC is XP SP3 + VS2005 SP1
The http server is a simple http server implemented by our member.
Thank you very much.
|
|
|
|
|
I hope you should handle the else part for
if(AcceptSocket == INVALID_SOCKET) in the following code. Try to get why is it failed.
AcceptSocket = SOCKET_ERROR;
while (AcceptSocket == SOCKET_ERROR)
{
AcceptSocket = accept(DLSocket, (SOCKADDR*) &DLAddr, &len);
if(AcceptSocket == INVALID_SOCKET)
{
}
}
And can you please explain bit more about :
DLAddr.sin_port = htons(pNW->m_iPort - 1);
Any specific reason for this ?
- Malli...!
|
|
|
|
|
I think that the else part for
if(AcceptSocket == INVALID_SOCKET)
is the expected result for accept(). So I assigned AcceptSocket to DLSocket outside of the while scope.
My reference is the example code on MSDN. So what part do I need to handle ? May you give me a hint ?
And I use (pNW->m_iPort - 1) because (pNW->m_iPort) is used for transmitting message between ActiveX and remote program.
I don't know the side effect of using the same port for transmitting message and transferring files. (I am a newbie for network programming)
So I use different port to do these two things...
Thanks for your reply.
|
|
|
|
|
oppstp wrote: DLSocket = AcceptSocket;
Bad!
The next iteration of the loop will try to accept on
the last accepted socket. That won't work.
You should only be calling accept on the listening socket.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi all,
I have developed an C++ application with Visual Studio 2005 and in them i want save some files in a remote server using IXMLHTTPRequest component. usually before save the file, i read the directory tree in remote server and user can select the right destination directory and often everything is OK and the application works fine.Except unfortunately when the destination directory(or actually the full path) is too long, the "send" method does not return and readyState remain 2, but on other hand file is correctly saved in remote server.
In this way i have tried to use a network monitoring pplication(Ethereal) and i observed that a "PUT" request is sent to remote server and then "200" response is received form the server and according to this observation the file was saved correctly. I think that i have problem with my client(MSXML4.DLL) or any internet setting.
Everybody can give me any recommendations to resolve this problem.
Thanks in advance
Alireza
|
|
|
|
|
Hi to all!
I'm working with MAPI on VC++ 6. If there is someone who can tell me how to search within address list (e.g. Global Address List) for users using criteria like first or/and last name!
I need this because if it's about large lists then I allow user to type in first and last name so I could get him what he wants.
I found articles which use PR_DISPLAY_NAME for searching but i'm wondering is there a way for me?
Thanks to all!
P.S.
Sorry for my language.
|
|
|
|
|
Hi Masters!
--------------
I'm working on an example keylogger in which keyboard messages are posted to
a thread, using PostThreadMessage() function. There's no window within
the mentioned thread, because it's going to work in the background!
But when I tried to translate recieved messages into right Ascii characters using
TranslateMessage(), I found it returned zero all time!
How can I translate recieved keyboard messages into characters?
If you need more information/clarification, then tell me PLEASE ...
Thnx in advanced ...
|
|
|
|
|
documentation says:
Return Value
If the message is translated (that is, a character message is posted to the thread's message queue), the return value is nonzero.
If the message is WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP, the return value is nonzero, regardless of the translation.
If the message is not translated (that is, a character message is not posted to the thread's message queue), the return value is zero.
It seems that it is failing to post message to your threads message queue. Why don't you try it by creating a hidden window??
Regards,
Sandip.
|
|
|
|
|
Firstly: I'm sure WM_KEYDOWN and WM_KEYUP are recieved to threads message queue!
Secondly: I just want to get assurance no more way I got, after that I'll create
a hidden window.
Please help me to solve the main problem, not to delete it and make another!
|
|
|
|
|
Jusef Marzbany wrote: Secondly: I just want to get assurance no more way I got, after that I'll create
a hidden window.
I don't know how you will get assurance
Jusef Marzbany wrote: Firstly: I'm sure WM_KEYDOWN and WM_KEYUP are recieved to threads message queue!
without this how WM_CHAR/WM_DEADCHAR message will be generated.
What i mean is your thread gets the WM_KEYDOWN/WM_KEYUP messages but
TranslateMessage() will produce WM_CHAR or WM_DEADCHAR message and that is what is failing.
If i understand correctly It will put WM_CHAR messages to message queue which fails in your case. TranslateMessage will not alter the lpMsg parameter.
I hope it helps. all the best
Regards,
Sandip.
|
|
|
|
|
Thank you and I realy want you not to leave me until we've reached something.
Let's clarify every thing! Here's my thread message looooooooop:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
switch(msg.message)
{
case WM_KEYDOWN:
MessageBox("WM_KEYDOWN");
break;
case WM_KEYUP:
MessageBox("WM_KEYUP");
break;
case WM_CHAR:
MessageBox("WM_KEYDOWN");
break;
}
if(!TranslateMessage(&msg))MessageBox("TranslateMessage failed!");
}
Now imagine I've pressed a key ... I get the followings:
1) MessageBox("WM_KEYDOWN");
2) MessageBox("WM_KEYUP");
2) MessageBox("TranslateMessage failed!");
|
|
|
|
|
First:
Jusef Marzbany wrote: case WM_KEYDOWN:
MessageBox("WM_KEYDOWN");
break;
case WM_KEYUP:
MessageBox("WM_KEYUP");
break;
case WM_CHAR:
MessageBox("WM_KEYDOWN");
Remove message box calls as these cause lot of problems because your messages will be processed till you close them. Use some trace statements or Log the data to some text files.
Second:
WM_KEYDOWN and WM_KEYUP combinations produce a WM_CHAR or WM_DEADCHAR message.
so if you do not get the WM_KEYUP it has to fail.
I have strong feeling that it is failing because of messagebox.
Regards,
Sandip.
|
|
|
|
|
OK! I'll do so and inform you the result. But you're my hero now and I don't want to lose you at all!
1) Could you please send me your eMail address to Marzbany@yMail.com so that I can
ask you other questions just in this single case for once
2) Why should NOT one use MessageBox() in such a cases (sorry I didn't get it )
modified on Monday, September 15, 2008 9:43 AM
|
|
|
|
|
Jusef Marzbany wrote: Why should NOT one use MessageBox() in such a cases (sorry I didn't get it Sigh )
Main reason is it is a modal window.
Currently i don't recall a instance but i have seen unexpected behaviors due to message box.
So i always use file logging or Trace statements for debugging.
Regards,
Sandip.
|
|
|
|
|
And your eMail?
|
|
|
|