|
I do not fully understand what you mean. Is that an option in Visual Studio? I also came up with another question. How can I convert my System::String^ (in button2_click()) to std::string (in GetAllFiles(string))?
|
|
|
|
|
Member 7997264 wrote: I do not fully understand what you mean
You are trying to use native C++ code in your managed C++ project. See this article[^]
Member 7997264 wrote: System::String^ (in button2_click()) to std::string
See this article[^]
You might get a better response if you asked your questions in the managed c++ forum, here[^]. This forum is for unmanaged C++.
Why is common sense not common?
Never argue with an idiot. They will drag you down to their level where they are an expert.
Sometimes it takes a lot of work to be lazy
Please stand in front of my pistol, smile and wait for the flash - JSOP 2012
|
|
|
|
|
Why does the follwing throw an error @ delete []pBuffer;
char *pBuffer = new char[1024];
CString csBuf = (CString)pMember->m_member_label;
pBuffer = csBuf.GetBuffer(sizeof(pBuffer));
xtext=(GLfloat)(((pMember->m_xs)+(pMember->m_xe))/2.0);
ytext=(GLfloat)(((pMember->m_ys)+(pMember->m_ye))/2.0);
ztext=(GLfloat)(((pMember->m_zs)+(pMember->m_ze))/2.0);
m_bmf->DrawStringAt((GLfloat)(xtext), (GLfloat)(ytext+5), (GLfloat)(ztext), pBuffer);
delete []pBuffer;
|
|
|
|
|
ARRRRGH. You overwrite pBuffer with the result of CString's GetBuffer(), which gives you a pointer to a buffer you don't own. Then you try to delete it. BOOM.
You cannot delete the pointer returned by GetBuffer(), that memory belongs to the CString Object and it will delete it when the object is deleted or goes out of scope.
Plus, you've lost the pointer to the char[1024] that you did allocate with new, leaving a memory leak for that memory.
|
|
|
|
|
Thanks.
So, I'm an idiot. What do I do?
I did this, and it at least ran:
pBuffer=NULL;
delete []pBuffer;
|
|
|
|
|
Setting pBuffer = NULL and then deleting it is a big NOP, a no-operation. You might as well just deleted the "delete" statement.
Instead, if your sole purpose in doing the "GetBuffer" is to pass a string to DrawStringAt(), then you don't need to "new" or "delete" anything in that program. All you need is:
CString csBuf = (CString)pMember->m_member_label;
char *pBuffer = csBuf.GetBuffer(1);
xtext=(GLfloat)(((pMember->m_xs)+(pMember->m_xe))/2.0);
ytext=(GLfloat)(((pMember->m_ys)+(pMember->m_ye))/2.0);
ztext=(GLfloat)(((pMember->m_zs)+(pMember->m_ze))/2.0);
m_bmf->DrawStringAt((GLfloat)(xtext), (GLfloat)(ytext+5), (GLfloat)(ztext), pBuffer);
Or better yet, avoid the GetBuffer() entirely and pass "csBuf" to DrawStringAt() and let the compiler convert from CString to char * as needed.
|
|
|
|
|
This did it: (you approve?)
CString csBuf = (CString)pMember->m_member_label;
char *pBuffer = csBuf.GetBuffer(sizeof(pBuffer));
xtext=(GLfloat)(((pMember->m_xs)+(pMember->m_xe))/2.0);
ytext=(GLfloat)(((pMember->m_ys)+(pMember->m_ye))/2.0);
ztext=(GLfloat)(((pMember->m_zs)+(pMember->m_ze))/2.0);
m_bmf->DrawStringAt((GLfloat)(xtext), (GLfloat)(ytext+5), (GLfloat)(ztext), pBuffer);
pBuffer=NULL;
delete []pBuffer;
|
|
|
|
|
Nope, see my response to the earlier post
|
|
|
|
|
You really need to study this[^] carefully. You also need to learn about the sizeof [^], new [^] and delete [^] operators.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
why pBuffer=NULL;
and then delete []pBuffer;
delete what? Only a invalid pointer
|
|
|
|
|
What in m_member_label is a CString pointer or not?
Or you should not do any thing, CString class local instance will destroy at the end of the fun automatically except a pointer from other place?
|
|
|
|
|
My application is working fine on 32 bit, I am trying to run in 64 bit mfc application, GUI is launching, the model is also loaded but the moment I press left right or middle mouse it crashes. what all i need to change to run successfully in 64 bit machine.
The error I found in OnMouseActive() function, do i need to implement this function ? Pls help me. Thanks a lot in advance
|
|
|
|
|
Hi,
Is there any machenism to check the socket status (alive or dead )?
|
|
|
|
|
What do you mean by "alive" and "dead"?
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> If it doesn't matter, it's antimatter.<
|
|
|
|
|
If there is any doubt about the condition of a socket, it's best to simply Close() it and open a new one.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
john5632 wrote: Is there any machenism to check the socket status (alive or dead )?
Send a request and get a response.
|
|
|
|
|
Hi all,
I am trying to map logical drive to physical drive i.e. when i pass D: then it should get that which Physical drive does D: belongs to.
I am using IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS for achieving my goal. My problem is it is returning error code 87 INVALID_PARAMETER.
I am not getting that what i am doing wrong
here is my code
CString str = _T("\\\\.\\\\D:");
HANDLE h = CreateFile(str, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
if(INVALID_HANDLE_VALUE != h)
{
VOLUME_DISK_EXTENTS sd;
DWORD dwRet;
ret = DeviceIoControl(h, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, &sd, sizeof(VOLUME_DISK_EXTENTS), &dwRet, NULL);
if(ret != 0)
{
AfxMessageBox(_T("Success"));
}
else
{
DWORD d;
d = GetLastError();
}
}
|
|
|
|
|
Use this (single backslash in front of device name / drive letter)
CString str = _T("\\\\.\\D:");
|
|
|
|
|
Your pathname is incorrect, it contains two backslash characters after the dot rather than one, as described here[^]. You should check the return value from your CreateFile() call before proceeding.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
after passing one also it is giving same error
_T("\\\\.\\D:")
CreateFile is returning correct handle but DeviceIoControl is returning 0.
|
|
|
|
|
Did you check that CreateFile() was successful?
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
yes CreateFile was successfull. But DeviceIoControl was returning 0.
|
|
|
|
|
I just tested your code and it works fine on Windows 7, but I need to run as administrator for it to work.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
i am also running it on win 7 I have provided it with admin rights also. I have made a dummy code and it works fine but when i implement it in my main application it gives same error.
|
|
|
|
|
VCProgrammer wrote: but when i implement it in my main application it gives same error.
Which suggests there is something else happening in your main application; time to get the debugger working to track what is happening and what may be different between the two programs.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|