Low level of MFC is the Win32 API. Open the context menu by right clicking on a call to CListCtrl::GetItemCount() and choose 'Go to definition'. You will see that it is an inline function that sends the LVM_GETITEMCOUNT message to the list control window. This message is not processed while your GUI thread is blocked.
A general rule is: Never block GUI threads. If you have to wait for events, do this in worker threads.
1) Write a exe program that uses your COM.
2) Launch the exe.
3) Open your COM Project is Visual Studio
4) Attach the already running exe with the Project.
5) Keep the break points and start debugging it.
see am not able to understand the 4th step.
attach in the sense by changing the configuration properties in that debugging and then
command and passing the path of the exe. if this the way then its control not coming to break point or i may be wrong to the exe ....
hi ,thanks ...
one more thing i want to ask how to register the dll .
am getting the error message that DLL has loaded but entry point DllRegisterserver was not found ...
but am wtritten the code for it
HRESULT hr = RegisterServer (AfxGetInstanceHandle(), // handle to dll module
CLSID_CCmpnt, // component CLSID
g_szFriendlyName, // friendly name
g_szVerIndProgID, // version independent prog id
g_szVerDndProgID); // version dependent prog id
its in a function name STDAPI DllRegisterServer(void)
the control not coming in this function what might be cause please reply
ok sorry ..
the code i build in 32 bit its success but when i configure the VS 2010 for 64 bit the error message con not instantiate the
HRESULT IContextMenu::GetCommandString(UINT_PTR,UINT,UINT *,LPSTR,UINT)' : is abstract
see declaration of 'IContextMenu::GetCommandString'
why this conflict
In DLL i have written the code for Context menu in vs2010 using COM
i derived the class CRsEraser : public IContextMenu, public IShellExtInit
this IShellExtInit and IContextMenu is are com class
when use it
CRsEraser *pCmpnt = new CRsEraser;
if (pCmpnt == NULL)
HRESULT hr = pCmpnt->QueryInterface (iid, ppv);
// Release the IUnknown pointer
CRsEraser *pCmpnt = new CRsEraser;this part showing its abstract class .
in 32 bit compile its working fine same when configure to 64 bit its throwing the error what i have mention earlier .
how i configure:
1 Open your Visual C++ Solution
2 Choose Build->Configuration Manager menu
3 Inside the Configuration Manager window, change the ‘Active solution platform’ to x64. If you don’t have any, you would need to create one by selecting the ‘New..’ drop down item. Copy settings from your Win32 platform.
4 Now rebuild your solution.