|
No worries - I appreciate ALL input. I'm really stumped here.
I added the override, but it doesn't seem to help.
inline void *operator new(size_t, void *p) {return p;}
I don't want to do anything with it. The memory is already allocated - I just need the vtable setup for me and the default constructor called.
J
|
|
|
|
|
Almost there... I haven't quite got it conceptually (which makes it worth hacking on, I guess) but this _seems_ to work.
Just some details of the delete declaration to argue with the compiler about... there are some special rules for delete at the class level. BTW the new could be global as well...
Not sure if the vtable pointer is included in the size - tracking p in the new op shows 16?
Facinating stuff...
#include "windows.h"
#include <iostream.h>
#include <stdio.h>
class foo {
public:
foo(){}
~foo(){
cout << "destroying " << i << endl;
}
foo(int n) : i(n){
cout << "constructing " << i << endl;
};
void* operator new (size_t sz, void* p) {
return p;
}
<code>
private:
int i, j, k, l;
};
int main(int argc, char* argv[])
{
HANDLE hHeap = GetProcessHeap();
if(hHeap) {
void * vp = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 20 * sizeof(foo));
foo * fooPs[20];
for (int i = 0; i < 20; ++i) {
fooPs[i] = new ((foo*)vp+i)foo(i);
}
for ( i = 0; i < 20; ++i ) {
fooPs[i]->foo::~foo();
}
HeapFree(hHeap, 0, vp);
}
int x;
cin >> x;
return 0;
}
|
|
|
|
|
Yeah, I built a tiny little test program and it seemed to work fine. I'm convinced that placement-new exists and works.
There would be no vtable in the class you gave. If you had derived your class from another with virtual members, it would have been 4 bytes bigger.
class V {
public:
V() {}
~V() {}
virtual void wank() = 0;
};
class B {
public:
B() {}
~B() {}
void wank() {}
};
class D1 : public V {
int i,j,k,l;
public:
D1() {}
~D1() {}
void wank() {}
};
class D2 : public B {
int i,j,k,l;
public:
D2() {}
~D2() {}
void wank() {}
};
ASSERT(sizeof(D1) == 20);
ASSERT(sizeof(D2) == 16);
Anyways, Joaquín has hit on it. MFC's DEBUG memory management interferes. I'll post the details as a reply to his post above...
Thanks for your input.
J
|
|
|
|
|
Cool! Here's another take on it:
http://www.michaelmoser.org/memory.htm
might make the class more 'portable'.
A search on Google for 'placement new MFC' turns up lots of stuff. Looks like the relations between crtdbg, MFCs allocation routines, heaps etc. would make for a good article.
I'd give it a try, but I seem to have deleted everything I new...
|
|
|
|
|
how do you remove records that are marked for deletion.
i have tried flushResultSet but that does nothing. my odbc source is execlusive.
I can not find any function in the recordset class that can do this simple fuction. does it exist or do i have to build my own?
|
|
|
|
|
Change the type of your cursel type to dynamic or dynaset,maybe it works
Mazy
You can find a solution (even a foolish one) for all problems (even big ones)
|
|
|
|
|
if i use dynamic i get
dynamic cursors not supported by odbc driver
if i use dynaset i get
odbc driver does not support dynamic.
I seem to only be able to use snapshot.
does this mean i am out of luck?
I am using a VFP database if that helps.
|
|
|
|
|
What are you talking about Of course ODBC support dynamic and dynaset You can check MSDN
Do you use MFC?
Mazy
You can find a solution (even a foolish one) for all problems (even big ones)
|
|
|
|
|
i do not thing the messages reflect that odbc does not support dynamic or dynaset, but the odbc driver for vfp tables.
|
|
|
|
|
I don't know about vfp but it is so strange and very foolish for vfp that doesn't support them ,(oh,don't forget you have to define
your curser type before you open database.)
If you are sure about vfp why don't you change your database to access or SQLServer?with SQLServer you can import your database to access or SQLServer or any kind of database you want easily.(or you can also use ADO instead of ODBC)
I'm curios about this strange subject,if you find it out I'd be so pleased if you send message to this discussion board or send me email
Mazy
You can find a solution (even a foolish one) for all problems (even big ones)
|
|
|
|
|
I have two or more iterators that I get from find in multi-maps that I want to
- find the common items from OR
- merge
depending on user input.
What is the most efficient way of doing this?
OR
Should I store the items in a container in a map for each key and use the container for the purpose? If so, then what would be the ideal container and what is then the efficient way of finding common elements or merging.
The items can be in any order. The sort order is not important.
Thomas
modified 29-Aug-18 21:01pm.
|
|
|
|
|
I ran into this issue while working on a project :- it appears that VC6.0 compiler does not know how to generate the implicit copy constructor when a class has a data member that has more than 1 copy constructor declared. Not sure if this is a known VC6.0 (with SP3) bug.
Here’s example that demonstrates the problem :-
#include <iostream>
class A
{
public:
A() { std::cout << "A constructor..." << std::endl; }
virtual ~A() { std::cout << "~A destructor..." << std::endl; }
A(const volatile A& a) { std::cout << "A const volatile& copy constructor..." << std::endl; }
A(const A& a) { std::cout << "A const& copy constructor..." << std::endl; }
};
class B
{
public:
B() { std::cout << "B constructor..." << std::endl; }
virtual ~B() { std::cout << "~B destructor..." << std::endl; }
private:
A a_;
};
class C
{
public:
C() { std::cout << "C constructor..." << std::endl; }
virtual ~C() { std::cout << "~C destructor..." << std::endl; }
const volatile A& getA() { return a_; }
private:
A a_;
};
int main(int argc, char* argv[], char* envp[])
{
B b1;
B b2(b1);
C c1;
A a = c1.getA();
return 0;
}
Compiling this results in “C:\Projects\CopyBug\CopyBug.cpp(46) : error C2558: class 'B' : no copy constructor available”. This issue came about while working on class C which returns a const volatile reference to A & this necessitated adding a new copy constructor to A. Unfortunately, this broke B. Originally, I thought the VC6 compiler did not distinguish between const & volatile modifiers & perhaps this led to the problem. However, it turns out that the compiler is able to invoke the correct copy constructor as illustrated by a2, a4, a6 & a8 objects.
I then removed class C & its related code completely & tried to compile - still the same error. It appears that as soon as the second copy constructor is added to A’s declaration, the compiler fails to generate an implicit copy constructor for B. As long as there is only one copy constructor declared in A (doesn’t matter which one!), B’s implicit copy constructor gets generated properly.
Is this a known bug with VC6(SP3)? Any insights would be appreciated. Thanks.
Chen Venkataraman
|
|
|
|
|
It seems a bug to me --to the best of my knowledge, the compiler should construct automatically copy ctors with signatures B(const volatile B&) and B(const B&) .
Anyway, these issues are usually very subtle, and the interpretation of standard is a very hard task. I suggest you post this question to newsgroup comp.lang.c++.moderated. Put more emphasis on the behavior of the standard with respect to multiple copy ctors, cause the newsgroup moderators tend to ban posts relating to specific compilers.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Anyone know how retrieve the path of an .ini file of an application?
GetProfileString retrieve only the ini file name, I would the path!
Grazie!
|
|
|
|
|
I think you got it mixed up, GetProfileString retrieves information from Win.ini.
I suggest you read about the registry and initialization files in MSDN.
There is code at CodeProject under General\System\Registry\.
Cheers,
/Fredrik
Sonork ID: 100.11430:PhatBoy
|
|
|
|
|
XAlien wrote:
GetProfileString retrieve only the ini file name
You are a little confused....
GetProfileString retrieve the string asociated with the key. (GetProfileString don't return the path or ini file name)
It's important to understand the difference between GetProfileString and GetPrivateProfileString, the First one reads the win.ini file the second one, the ini in a private directory, you must to inform the path and ini file name....
Regards....
Beta. Software undergoes beta testing shortly before it's released. Beta is Latin for "still doesn't work."
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
Hi! How knows, how do they make simple owner draw control inherited from CWnd ?
I'm sorry for my english.
Vitali
|
|
|
|
|
I think first you have to inherit your class from CWnd or controls class,then you have to overriden "DrawItem" function for your class and implement it yourself
Mazy
You can find a solution (even a foolish one) for all problems (even big ones)
|
|
|
|
|
Hi
take a look at this article here at CodeProject:
http://www.codeproject.com/miscctrl/subclassdemo.asp
There are also many other aticles about "subclassing" windows here at this site.
Yust browse a bit.
regards
Gregor
modified 12-Sep-18 21:01pm.
|
|
|
|
|
|
Hi,
I have application with flexgrid in view. It works fine on computers where is vc++. Where it isn't installed the grid isn't showing in window.
I looked for msflxgrd.ocx it wasn't on that computer, so i've copy and register it with regsvr32 but it still isn't working
any suggestions why?
regards
|
|
|
|
|
It could have to do with licensing issues (machines with VC++ installed do not have these problems as the IDE comes with a "developing license"). This article I found in Usenet might be helpful to you.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
did you compile in Release mode?
Sorry to dissapoint you all with my lack of a witty or poignant signature.
|
|
|
|
|
Hi,
Can anybody tell me the equivalent of GetProcessMemoryInfo for Windows 98?
Thanks
|
|
|
|
|
Hi,
I want to provide a facility to select a directory. Been looking at CFileDialog but there doesn't seem to be anything to aid me.
Anyone any bright ideas?
Cheers
Rich
|
|
|
|