|
If you want to learn about iterators, I can recommend that you implement a few. It's a great way of learning what it is, the difference between the various types, forward/random access/bidirectional/etc, and in what situations an iterator is a good or bad choice. It's also a great lesson in efficiency as well as a way of getting to know stl in general a bit better.
|
|
|
|
|
Hey there guys,
Okay I have my current code working for GLFW. Effectively i'm just trying to build a small main-frame which I can build on. I have IniApi.cc that stores the main() routine. I have CharKeyCallback.cc which handles the glfwSetCharCallback() just fine.
However, i'm trying to make a Texture class which will load textures from a file and store them in memory. So, I placed this at the top of the Texture.cc file:
#include <Windows.h>
#include <GL/glfw.h>
#include <stdio.h>
#include "Texture.h"
And my "load" function works like this:
bool Texture::ReadImage()
{
glfwReadImage(_filename, ImageData, _flags);
return !(ImageData == NULL);
}
(If it appears messy or simple, it's because i'm just laying the foundations at the moment).
However, when I go to compile, I receive the following error:
error LNK2019: unresolved external symbol _glfwReadImage referenced in function "public: bool __thiscall Texture::ReadImage(void)" (?ReadImage@Texture@@QAE_NXZ)
Now, my InitApi.cc runs the lpfw functions just fine, which means the library & DLL have been loaded (glfwOpenWindow opens a window successfully) but Texture.cc won't recognise the lpfw functions, even though i've included #include <GL/glfw.h> at the top.
Any suggestions? Thank you
|
|
|
|
|
Nevermind.
For those who might encounter this problem, it turns out I had to add #define GLFW_DLL before the #include <GL/glfw.h>
Resolved.
|
|
|
|
|
Is there any function in C++ or C that checks if there is a character in the standard input and returns immediately? I have this application that creates a new thread when it starts working on an assigned task. The new thread asks the user to press some keys for other options as the main thread does its work. What I want is that if the main thread finishes doing its work and the user has not selected any of the options, then the thread that was created to get user options should return. But because the new thread waits for user input, I'm finding it difficult to stop it from waiting for user input so that it can return. I initially thought cin.peek() could do it but it also waits when the user has not press any key. I want a way to terminate the new thread as it waits for input, when the main thread has finished its work. Please help.
|
|
|
|
|
_kbhit [^].
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
use _getch(), the header file is conio.h
|
|
|
|
|
_getch() actually waits for the user input.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
How to Hide the TilteBar of a window Created Using CMFCToolBar in Floating Style
|
|
|
|
|
You can try calling ModifyStyle(WS_CAPTION, 0) , but if you remove its title bar you loose the ability to meve it (and then you cannot dock it again by dragging its window near the main window border)...
|
|
|
|
|
Hi,
My application is MDI application.
In that im having one SDI view(CGlgPopup) derived it from CFrameWnd.
Now for that view,i want to remove Maximize,minimize button and also i want to set the size of the view as small like 200x200 size.
In PreCreateWindow() of CGlgPopup class,
i did like
cs.style &= ~(WS_MAXIMIZEBOX);
cs.style &= ~(WS_MINIMIZEBOX);
cs.style &= ~(WS_CHILDWINDOW);
cs.x = xPosVal-60;
cs.y = yPosVal-50;
cs.cx = 400;
cs.cy = 300;
But the expecting result is not coming.
How can i do that?
Anu
|
|
|
|
|
Hi all,
I am trying to trim a string and store the values in some variable.
i.e
I have
CString str = sample(1,2,3,4,5);
I want to store the values as
x1=1,x2=2,x3=3......so on.
Any idea how can i proceed will be thankful
Thanks in advance
Raj
|
|
|
|
|
I assume you mean
CString str = sample("1,2,3,4,5");
You can use std::stringstream, ::strtok(), CString::Find(), or maybe boost::split(). Try each of them and see how they differ.
|
|
|
|
|
Dear, Firstly assign object of CString correctly.
modified on Wednesday, August 25, 2010 2:44 AM
|
|
|
|
|
What's wrong with assigning a variable from a function call?
|
|
|
|
|
No problem, that's
CString sample(int a, int b, int c, int d, int e)
{
CString str;
str.Format("%d,%d,%d,%d,%d", a,b,c,d,e);
return str;
}
CString str = sample(1,2,3,4,5);
just pure humour!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
raju_shiva wrote: CString str = sample(1,2,3,4,5);
The above instruction is not correct.
Supposing it is:
CString str = "sample(1,2,3,4,5)"
I would use CStringT::Tokenize [^], have a look at the sample code provided.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: Supposing it is:
CString str = "sample(1,2,3,4,5)"
Actually i am reading it from edit box as a CString.
i.e
CString str = "sample(1,2,3,4,5)"
I am trying with this code
CString str = "sample(1,2,3,4,5)",str1,str2;
str1 = str .Left(str .Find("("));
str2 = str .Right(str .Find("("));
str.Left is working fine
I am getting the result as sample
But str.Right i am not getting the required result as 1,2,3,4,5).
I am getting 3,4,5
What i am doing wrong
Thanks
Raj
|
|
|
|
|
raju_shiva wrote: str1 = str .Left(str .Find("("));
str2 = str .Right(str .Find("("));
Change to:
int pos = str.Find("(");
str1 = str.Left(pos);
str2 = str.Right( str.GetLength() - pos - 1);
However, I still would use Tokenize for the overall task.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi,
Thank you for your reply.
I have used for() loop and find to split the string.
As i am not familar with Tokenize,thats why i did not used it.
Thanks
Raj
|
|
|
|
|
I am giving example as your requirement.
eg.
CString str = "sample(1,2,3,4,5)",str1,str2;
int curPos= 0;
str1 = str.Tokenize("()",curPos);
Output: str1 = 1,2,3,4,5
|
|
|
|
|
Hey
I used DeleteVolumeMountPoint function to remove a USB drive (E from my machine. Now i want to bring that back. I tried re-booting and that doesn't seems to help.
I think calling SetVolumeMountPoint function will bring it back. But that function needs the GUID of USB drive, which i don't have.
Any ideas how to get the USB drive(volume - E:\) back?
Can i do that via regedit? If so, how?
THanks in advance
|
|
|
|
|
Got a system restore point from before you deleted it?
[If not, why not? ]
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
If you want to do it programmatically, there is some work to do around the SetVolumeMountPoint function.
The easiest way is to do it from the Control Panel: open the Administrative tools and run Computer management, then select the section Disk management. There you can see all the disks, both removable and not; you should right-click on the USB drive and select Change drive letter and path (or Assign drive letter and path, or similar).
Cheers,
Sauro
|
|
|
|
|
Hey Sauro,
That worked awesome!
Thanks a lot.
|
|
|
|
|
I'm using Visual C++ 6 service pack 6 on XP. According to the documentation for that version, Advanced Windows Extentions (AWE) allows users to access physical memory beyond the 2 GB boundary for a process. There is an example in the documentation:
http://msdn.microsoft.com/en-us/library/aa366531(VS.85).aspx
I've had trouble linking to kernel32.dll to make this work. However, the kernel32.dll(2009) in Windows/system32 has the functions so I used LoadLibrary() to explicitly link to that kernel32.dll. Unfortunately, even on a system with 2.96 GB of RAM, running ONLY the simple example, I cannot get VirtualAlloc() to successfully reserve memory over 1100 MB (it does work at 1100 MB and below). I am using the VirtualAlloc from the 2009 kernel32.dll.
*****
typedef LPVOID (WINAPI *LPVIRT)(LPVOID lpAddress,SIZE_T dwSize,DWORD flAllocationType,DWORD flProtect);
LPVIRT lpVirt;
HMODULE hHandle = LoadLibrary("kernel32.dll");
// Reserve the virtual memory.
lpVirt = (LPVIRT)GetProcAddress(hHandle, "VirtualAlloc");
lpMemReserved = (*lpVirt)( NULL,m_uMBytes*0x100000,MEM_RESERVE | MEM_PHYSICAL,PAGE_READWRITE );
if( lpMemReserved == NULL )
{
TRACE("Cannot reserve memory.\n");
return;
}
*****
With 2.96 GB, shouldn't I be able to reserve more than 1100 MB? How can I do it?
|
|
|
|
|