|
It's most likely something in the registration code within the DLL that is the error. Chances are that it's segfaulting.
--
There's a new game we like to play you see. A game with added reality. You treat me like a dog, get me down on my knees.
We call it master and servant.
|
|
|
|
|
Hi,
I can't get bitblit to work with WTL. It keeps printing a black square. But the size of the square is equal to the size of the image it should print so i think i'm forgetting something. I'm converting my Win32/SDK app to WTL and in Win32/SDK it works. This is the code i'm using:
<br />
CBitmap Image;<br />
Image.LoadBitmap(238);<br />
<br />
CPaintDC dc(m_hWnd);<br />
CDC hdc;<br />
hdc.CreateCompatibleDC(dc.m_hDC);<br />
<br />
BITMAP Temp;<br />
Image.GetBitmap(&Temp);<br />
SelectObject(hdc.m_hDC,&Temp);<br />
dc.BitBlt(50,50,Temp.bmWidth,Temp.bmHeight,hdc,0,0,0);<br />
I tried making a filledrect with the same DC object and it worked. Thanks for all help.
|
|
|
|
|
modify the line to :
SelectObject(hdc.m_hDC,Image);
|
|
|
|
|
Doesn't seem to help. It keeps blitting an empty (black) surface to my screen...the size is correct though so the loading prolly is ok....
Anyone?
|
|
|
|
|
Try replacing:
Tommy2k wrote:
BITMAP Temp;
Image.GetBitmap(&Temp);
SelectObject(hdc.m_hDC,&Temp);
dc.BitBlt(50,50,Temp.bmWidth,Temp.bmHeight,hdc,0,0,0);
with something like:
HBITMAP hOldBitmap = hdc.SelectBitmap ( (HBITMAP) Image );
SIZE dim;
Image.GetBitmapDimension ( &dim );
dc.BitBlt ( 50, 50, dim.cx, dim.cy, (HDC) hdc, 0, 0, SRCCOPY );
dcBW.SelectBitmap ( hOldBitmap );
cheers,
-B
|
|
|
|
|
Thanks, i works now
|
|
|
|
|
Ok I hope this is a stupid question. How do you lock STL stream files such as ostream, so other processes can't access them. ie. I want the functionality that CreateFile( ..., FILE_SHARE_READ etc. ) offer. When I open a file to write to it, I want to ensure no other apps/processes can open it untill I'm finished with it. I can't see any options to let me do this with STL streams. Surely I'm missing something here.
Neville Franks, Author of ED for Windows. www.getsoft.com
Make money with our new Affilate program
|
|
|
|
|
Could you find any solution?
Thank You
|
|
|
|
|
Soni wrote:
Could you find any solution?
No, do you have one?
Neville Franks, Author of ED for Windows. www.getsoft.com
Make money with our new Affilate program
|
|
|
|
|
Hi All,
I am new to COM and ATL and have written a short console app in an attempt to learn ATL's Database access techniques. My app creates an Accessor class, CDataSource object, CSession object and CCommand object. I am sucessfully able to get and display info from the database. The ATLDB objects are closed and CoUninitialized is called. Everything seems fine until COM is uninitialized. That is when I get the following error ... Unhandled exception in oleDB.exe: 0xC0000005 Access Violation. I am not sure what exception to catch or why it is happening. Like I said I am new to COM and ATL, maybe someone has a simple answer. If necessary I can post the code.
Thanks
Paul
|
|
|
|
|
Got it!!!
It's amazing what a couple of braces will do. By putting the COM objects in a block, the destructors are guaranteed to be called befor CoUninitilize().
|
|
|
|
|
I have a string array defined as std::vector<std::string> m_aData; in my class, which works fine and performs brilliantly, but when I have a fairly large number of elements (100,000) it takes an absolute age to remove the elements using m_aData.clear(); . It can literally take up to a minute to complete. I'm fairly new to STL, is there anything that can be done to improve the performance on this one line, or is there a different approach I can take to emptying the array?
Dylan
|
|
|
|
|
calling 100,000 ~std::string could take some time.
You can overwrite allocator for both string and vector to implement garbage collection of some kind, but it is very difficult.
|
|
|
|
|
How long are your strings? If your strings are long (i.e. 512 bytes), that would be 51 MB of data being deallocated. This can cause the paging system fits.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
I thought of this, and the strings are all 50 char's long, so that should be less the 5MB of memory.
I did a release build and checked the speed on that, and there was no real performance over head - is the speed problem just on the debug build? I ask cause each time I stop the running process in debug I find I end up in _free_dbg , which according to the comment in that file is the 'free a block in the debug heap'.
Can I safely assume that the performance overhead is only in debug mode? Like I said, pretty new to STL...
Dylan
|
|
|
|
|
Yes, this is a debug problem. The debug version of the allocation system will do checks of the allocation pools to make sure you haven't trash memory by overrunning allocated memory.
If it runs just fine in release mode, then don't worry about it.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
The std::string isn’t optimized. If you are developing under ATL or MFC use their string classes or create your own. When the string is deleted this may not affect speed but working other operations will improve alot.
|
|
|
|
|
wehn i am building an ATL DLL i am getting this error message "error MIDL2020 : error generating type library : SaveAllChanges Failed". What is the possible solutions;)
|
|
|
|
|
1. midl compiler has an option "/error all" I recommend trying it.
2. Check if your source control/target drive functioning properly
|
|
|
|
|
Hi, is there any code around to persist a vector etc. to/from the registry. I know I can write a simple iterator to do this, but I'm wondering if someone has written some generic code. The ability to persist to XML would also be most welcome.
I have looked around CP and did find "A set of template classes for working with the registry" http://www.codeproject.com/system/registry_value.asp[^] but that isn't quite what I need. Maybe I can just entend it!!
Neville Franks, Author of ED for Windows. www.getsoft.com
Make money with our new Affilate program
|
|
|
|
|
I program an app that uses a treeCtrl, and I use the tv_item::lParam save an address of an item in std::list. Code like this:
std::list<MyStruct> items;
....
std::list<MyStruct>::iterator pCur = items.begin();
TVM_INSERTITEM tvi;
tvi.item.mask = TVIF_TEXT | TVIF_PARAM...
tvi.item.lParam = &(*pCur);
....
TreeView_InsertItem(hTree, &tvi);
....
when I retrive an item of the tree and its MyStruct:
MyStruct* pMyStruct;
TV_ITEM item;
item.mask = TVIF_TEXT|TVIF_PARAM...
TreeView_GetItem(hTree, &item);
pMyStruct = (MyStruct*)item.lParam;
Now, the pMyStruct is not equal the &(*pCur) above.
How can I prohibit STL alter its items' addresses?
|
|
|
|
|
Well, std::list guarantees that addresses of their elements won't change (unless you delete them, of course). Do you mean that pMyStruct is not equal to the value tvi.item.lParam as it stood before calling TreeView_InsertItem ? If so, your problem lies elsewhere, and in fact does not have to do with std::list : basically, you're not getting the value you previously set in tvi.item.lParam .
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
My problem is following.
I have a template MyTemplate
template <typename t="">
class MyTemplate
{
/////////////some members;
};
and I want to declare a vector whose elements would be of type MyTemplate.
It should be code like this (as I expect)
vector< MyTemplate<t> > MyVector;
But this of course does not compiled.
Where is my mistake?
Could anyone of gurus help me?
|
|
|
|
|
Visual C++ does not support templates as template parameters. Remember, template is not a type. You create a type from a template by providing template parameters.
|
|
|
|
|
template <typedef P>
class MyTemplate
{
public:
MyTemplate() {};
P m_Data;
};
typedef MyTemplate<int> MyIntTemplate;
std::vector<MyIntTemplate> MyIntTemplateVecotr;
Todd Smith
|
|
|
|