October 24, 2014
Hot Topics:
RSS RSS feed Download our iPhone app

Hottest Forum Q&A on CodeGuru

  • March 30, 2004
  • By Sonu Kapoor
  • Send Email »
  • More Articles »

Introduction:

Lots of hot topics are covered in the Discussion Forums on CodeGuru. If you missed the forums this week, you missed some interesting ways to solve a problem. Some of the hot topics this week include:


Is it safe to call LoadLibrary inside a constructor? (top)  

Thread:

j0nas needs to know whether is it safe to call the LoadLibrary function inside a constructor. What do you think? Is it safe?

Is it safe to call LoadLibrary inside a constructor of a global
object in a DLL?

My guess is no because it can deadlock the same way as calling
LoadLibrary inside DllMain. But, I'm not 100% sure. Any ideas?

Well, the global constructors are called before DllMain, so you would assume the answer would then be, yes it would be unsafe, because of circular DLL references.

If you want, step into the code via the disassembler, placing breakpoints in the ctor's and in the dllmain and using the OS symbols; it should be very easy to see what happens.

So, given that case, the answer would be to have an init function in the DLL.


Can I override the MFC inheritance? (top)  

Thread:

mddd asked an interesting question. Take a look at what he wants to do.

Here is the MFC class hierachy:
CObject
|
CCmdTarget
|
CWnd
|
CDialog
|
CPropertyPage
Will I be able to do something like this?
CObject
|
CCmdTarget
|
CWnd
|
SDialog
|
CPropertyPage
My SDialog derives from CDialog.

My SDialog has functionality that I want to be able to use in
my class (CMyPropertyPage) that I will derive from CPropertyPage.

One obvious approach is to use multiple inheritance:

CMyPropertyPage : public CPropertyPage, public SDialog
{
}

Multiple inheritance is strongly discouraged with MFC—especially when deriving from two classes that are both derived from CWnd as in your case—this won't work anyway.

You should probably implement the functionality you need in a class derived from CPropertyPage. If you absolutely need to share some part of the implementation for both CDialog- and CPropertyPage-derived classes, you could still consider creating a mix-in class with that behaviour (however, that class must not be derived from CWnd or any other MFC class such as CObject). You then could use multiple inheritance, deriving CYourDialog from CDialog and the mix-in class, and CYourPropertyPage from CPropertyPage and the mix-in class.


Which STL data structure should I use? (top)  

Thread:

avi123 has some difficulties finding the correct data structure. Can you help him?

I'm having diffculties to find the right data structure for me.
I have a structure with five fields. Something like this:
struct myStruct
{
   int iField1;
   int iField2;
   int iField3;
   int iField4;
   string sField5;
};
I need some kind of data structure that will hold unknown
numbers of elements of myStruct and I need to have each fields as
a key field.

If I have only 1 field as the key I would have used hash_map.
for example if the key is iField1

then I would have used hash_map with int as key and with myStruct
as the data.

I need to be able to have five keys (and return the correct element
according to 1 of them, meaning the key is not combination of them,
but each one of them should be able to retrive the correct element).

You should use a vector<const myStruct> to store the data and a map<int,const myStruct&> to store an index that points to the correct value of myStruct for each value of iField1. Use another map for each additional index.

Adding and deleting myStructs will be some work. Updating even more, so I recommend implementing it as delete+insert (thus the const). At last, wrap the vector and maps up in another class to make the whole thing easier to use. For example,

class my_container
{
public:
   void add(const myStruct& s)
   {
      // push_back to the vector, update the maps, etc.
   }

   // other functions for getting at the data

private:
   std::vector<myStruct> structs_;
   std::map<int, myStruct*> map1_;
   // etc for the other maps
};


Which DLL contains CTime? (top)  

Thread:

love2mao is working with an application in which he used CTime and CTimeSpan. Now, he wants to distribute this application to the client. He wants to know which DLL he needs to restribute along with the application.

In my app, I used CTime and CTimeSpan and I want to distribute my
app. I chose the MFC DLL as shared to get a small .exe. How can I
know which DLL I need to run my app in a new environment?

In theory, you don't need to know which DLL provides which feature because your clients should automatically have copies of all the DLLs they need on their system. They're installed with the standard distributions of Windows. The only times you need to distribute a DLL are either when you built it yourself or if your app only works in debug mode. However, you're not allowed to distribute debug versions of the standard Microsoft DLLs; it contravenes the license agreement.







Comment and Contribute

 


(Maximum characters: 1200). You have characters left.

 

 


Sitemap | Contact Us

Rocket Fuel