|
Well, I don't even know what you are trying to do...
Anyway, the best advice I can give you is to read a good book about MFC, it seems that you are missing some fundamuntal concepts with MFC. A lot of people suggested this bool[^], never read it myself though.
|
|
|
|
|
Hi,
I have the following error.
Error 26 error LNK2019: unresolved external symbol "public: __thiscall CGetFootDlg::CGetFootDlg(class CWnd *)" (??0CGetFootDlg@@QAE@PAVCWnd@@@Z) referenced in function "public: __thiscall CMainDlg::CMainDlg(class CWnd *)" (??0CMainDlg@@QAE@PAVCWnd@@@Z) MainDlg.obj
Can any one tell me whats wrong!
Thanks
Dhiraj Kumar Saini
|
|
|
|
|
In the cpp file of the class CGetFootDlg, check the function CGetFootDlg::CGetFootDlg(class CWnd *) exists or not.
|
|
|
|
|
It exist but in the form
CGetFootDlg::CGetFootDlg(bool bMainDlg, CWnd* pParent /*=NULL*/)
: CDialog(CGetFootDlg::IDD, pParent)
{
m_bMainDlg = bMainDlg;
m_bChatTransferred = false;
}
Whats wrong with it;
Dhiraj Kumar Saini
|
|
|
|
|
Dhiraj kumar Saini wrote: Whats wrong with it;
So in the header file of CGetFootDlg, have you defined a function like
CGetFootDlg(bool bMainDlg, CWnd* pParent /*=NULL*/); ?
|
|
|
|
|
Yes i have declared it in the header file of CGetFoorDlg since this function is a contrucotr.
I have declared two contructors:
CGetFootDlg(CWnd* pParent = NULL);
and
CGetFootDlg(bool bMainDlg, CWnd* pParent = NULL);
|
|
|
|
|
Dhiraj kumar Saini wrote: CGetFootDlg(CWnd* pParent = NULL);
The above function dosent have the implimentation in cpp right. In the CPP you have only written implementation for CGetFootDlg(bool bMainDlg, CWnd* pParent = NULL);. So remove the first constructor from the header.
After this if you compile, you will get error from the constructor if CMainDlg. Because from that constructor, you are trying to call CGetFootDlg(CWnd* pParent);. But while linking, the compiler couldn't find the implementation. That why it gave out link error.
Modify the CMainDlg constructor to call the CGetFootDlg(bool bMainDlg, CWnd* pParent = NULL); constructor instead of CGetFootDlg(CWnd* pParent = NULL);
|
|
|
|
|
Hi ,
But in CMainDlg Constructor I am not calling CGetFootDlg.
Can u just explain it more
|
|
|
|
|
May be you have member variable of CGetFootDlg in CMainDlg.. isnt it?
|
|
|
|
|
Yes u r right!
So what to do?
|
|
|
|
|
You can use the initialisation list of CMainDlg. That is if your current CMainDlg constructor is as follows
CMainDlg::CMainDlg( CWnd* pParent )
: CDialog(CMainDlg::IDD, pParent)
Modify it as
CMainDlg::CMainDlg( CWnd* pParent )
: CDialog(CMainDlg::IDD, pParent),
m_FootDlg( true, this )
Where m_FootDlg is the member variable of class CGetFootDlg.
|
|
|
|
|
Actually CMainDlg is My Main DialogBox Class On which by default i am placing a new dialog box
CVisitorDtlsDlg and its memeber variable it CMainDlg is m_dlgVisitorDetails.
the contructor i have defined for CMainDlg is as follows:
CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMainDlg::IDD, pParent),m_dlgVisitorDetails(true,this)
{
//{{AFX_DATA_INIT(CMainDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_nTimer = 0;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
Now what i want is if I click the button on CgetFootDlg which is there on the CmainDlg as a button control then in Place of CVisitorDtlsDlg dialog box i need to open a new DialogBox CGetFootDlg which have certain controls.
Again if I click ViewDetails button control which is placed on CMainDlg the Dialogbox CGetFootDlg
shoulb be replaced by CVisitorDtlsDlg .
Please tell how to imlement the CMainDlg Constructor for both the Dialog Boxes that are as a control on the CMainDlg but visible only one at a time.
|
|
|
|
|
The link error can be fixed by modifying the code as follows..
CMainDlg::CMainDlg(CWnd* pParent )
: CDialog(CMainDlg::IDD, pParent),m_dlgVisitorDetails(true,this),
m_FootDlg( true, this )
Dhiraj kumar Saini wrote: Please tell how to imlement the CMainDlg Constructor for both the Dialog Boxes that are as a control on the CMainDlg but visible only one at a time.
The constructor have nothing to do with the visiblity of the dialog. If you want to know whether the other dialog is visible or not, you can the IsWindowVisible() function.
|
|
|
|
|
Still it is giving the error as
Error 27 error LNK2019: unresolved external symbol "public: __thiscall CGetFootDlg::CGetFootDlg(bool,class CWnd *)" (??0CGetFootDlg@@QAE@_NPAVCWnd@@@Z) referenced in function "public: __thiscall CMainDlg::CMainDlg(class CWnd *)" (??0CMainDlg@@QAE@PAVCWnd@@@Z) MainDlg.obj
I have made the constructor of CmainDlg as
CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMainDlg::IDD, pParent),m_dlgVisitorDetails(true,this),
m_dlgGetFootPrint(true,this)
{
//{{AFX_DATA_INIT(CMainDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_nTimer = 0;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
|
|
|
|
|
have you added the cpp file of CGetFootDlg to the project files( you can check this from the file view tab->Source files ). If it is not added to the projet add it.
|
|
|
|
|
Yes I have added the cpp file
|
|
|
|
|
Please help me as u have understood my problem
|
|
|
|
|
how do you customize the title bar for applications? i'd like to know how to do this for either: a windows forms application or MFC application (using visual studio 2008). the windows forms application can be in either visual basic or c++. Specifically, i want to customize the buttons for the application (minimize, maximize, and close). Thanks for help in advance.
|
|
|
|
|
|
Is that for mfc or atl?
|
|
|
|
|
|
HI all,
I am quite new to C++. Recently, I am working on a project that requires me to get the processorId from computers. After a quick search on the internet, I found that WMI is the what I need. Subsequently, I get the following code from MSDN (http://msdn.microsoft.com/en-us/library/aa390423(VS.85).aspx):
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")
int main(int argc, char **argv)
{
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
cout << "Failed to initialize COM library. Error code = 0x"
<< hex << hres << endl;
return 1;
}
hres = CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL
);
if (FAILED(hres))
{
cout << "Failed to initialize security. Error code = 0x"
<< hex << hres << endl;
CoUninitialize();
return 1;
}
IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &pLoc);
if (FAILED(hres))
{
cout << "Failed to create IWbemLocator object."
<< " Err code = 0x"
<< hex << hres << endl;
CoUninitialize();
return 1;
}
IWbemServices *pSvc = NULL;
hres = pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"),
NULL,
NULL,
0,
NULL,
0,
0,
&pSvc
);
if (FAILED(hres))
{
cout << "Could not connect. Error code = 0x"
<< hex << hres << endl;
pLoc->Release();
CoUninitialize();
return 1;
}
cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;
hres = CoSetProxyBlanket(
pSvc,
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_NONE,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE
);
if (FAILED(hres))
{
cout << "Could not set proxy blanket. Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_OperatingSystem"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
cout << "Query for operating system name failed."
<< " Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if(0 == uReturn)
{
break;
}
VARIANT vtProp;
hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
wcout << " OS Name : " << vtProp.bstrVal << endl;
VariantClear(&vtProp);
}
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
pclsObj->Release();
CoUninitialize();
return 0;
}</wbemidl.h></comdef.h></iostream>
I added ->#include "stdafx.h" <->
I get the following Error:
fatal error C1083: Cannot open include file: 'Wbemidl.h': No such file or directory
I search my computer and found that the header file is located at C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V6.0A\INCLUDE.
I then included the path C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V6.0A\INCLUDE under tools->options->categories.
I proceeded to compile it and get the following errors (shortened version):
c:\program files\microsoft sdks\windows\v6.0a\include\wbemcli.h(1737) : error C2061: syntax error : identifier '__RPC__in'<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wbemcli.h(1744) : error C2061: syntax error : identifier '__RPC__in_opt'<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wbemcli.h(1748) : error C2061: syntax error : identifier '__RPC__deref_out_opt'<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wbemcli.h(1751) : error C2061: syntax error : identifier '__RPC__in'<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wbemcli.h(3071) : error C2061: syntax error : identifier '__RPC__in'<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wbemcli.h(3723) : error C2061: syntax error : identifier '__RPC__in_opt'<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wbemprov.h(273) : error C2146: syntax error : missing ';' before identifier 'LPWSTR'<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wbemprov.h(273) : fatal error C1004: unexpected end of file found<br />
Again, I searched around the internet. From other people's question and answers, there is one suggesting that I should add
#include <rpcsal.h></rpcsal.h>
I added #include <rpcsal.h></rpcsal.h> and get the following error:
fatal error C1083: Cannot open include file: 'sal.h': No such file or directory
Then, I add the following diretory to the the categories: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\INCLUDE
Next, I get this error: error C2061: syntax error : identifier 'DWORD_PTR'
I have no idea how to continue from here. I am afraid I made some mistake in the middle of some where.
For your information, I installed the Visual Studio Express 2008 before installing Visual Studio 6.0.
Is there anyone can help me?
I would like to learn to use the WMI.
I have read another tutorial/sample from the Code Project, but I got the same problem since it was also using #include <wbemidl.h>.
**Update**
To let you better understand my situation, I would like to add some details.
I have multiple version of visual studio(VS Express 2008, VS 6) installed in my PC with VS 6 being the latest install. I have installed the service pack 6 as well.
In my Tools-> Option-> Directories, the default paths included are:
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE<br />
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE<br />
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
Due to the fatal error C1083: Cannot open include file: 'Wbemidl.h': No such file or directory error , I included C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V6.0A\INCLUDE
As I browse through some forum, there is one guy(http://www.tech-archive.net/Archive/Media/microsoft.public.windowsmedia.sdk/2007-02/msg00105.html) suggested to include rpcsal.h . Again, I have to include C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\INCLUDE since the header file is not available in those four directories which I have included earlier. However, the error persist as mentioned above in the first post.
This morning, I changed the order of the path in Tools-> Option-> Directories from:
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V6.0A\INCLUDE
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\INCLUDE
To:
C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V6.0A\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\INCLUDE
Without changing any line of the codes, I get a different error messages which are:
c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(3417) : warning C4035: 'ReadPMC' : no return value<br />
c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(3447) : warning C4035: 'ReadTimeStampCounter' : no return value<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wingdi.h(4340) : warning C4068: unknown pragma<br />
c:\program files\microsoft sdks\windows\v6.0a\include\wingdi.h(4341) : warning C4068: unknown pragma<br />
c:\program files\microsoft visual studio\vc98\include\comdef.h(695) : error C2065: 'IAsyncSetup' : undeclared identifier<br />
c:\program files\microsoft visual studio\vc98\include\comdef.h(710) : error C2065: 'IClassAccess' : undeclared identifier<br />
c:\program files\microsoft visual studio\vc98\include\comdef.h(712) : error C2065: 'IClassAdmin' : undeclared identifier<br />
c:\program files\microsoft visual studio\vc98\include\comdef.h(715) : error C2065: 'IClassRefresh' : undeclared identifier<br />
c:\program files\microsoft visual studio\vc98\include\comdef.h(750) : error C2065: 'IEnumClass' : undeclared identifier<br />
c:\program files\microsoft visual studio\vc98\include\comdef.h(762) : error C2065: 'IEnumPackage' : undeclared identifier<br />
c:\program files\microsoft visual studio\vc98\include\comdef.h(1078) : error C2065: 'IXMLElementNotificationSink' : undeclared identifier<br />
Error executing cl.exe.<br />
Is this a problem of my installation?
Or there are multiple version of header files with the same file names?
I don't understand why the header files is scattering in different places. Also, why rpcsal.h is not available in VC98\include folder nor is it available in C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V6.0A\INCLUDE?
Did I included any functions all files which is meant for .NET?
I am so confused. Please advice.
|
|
|
|
|
Did you try to set
"C:\Program Files\Microsoft SDKs\Windows\v6.0\Include" first in include paths?
|
|
|
|
|
When I set C:\Program Files\Microsoft SDKs\Windows\v6.0\Include on top of the include path list, I get the following message:
Cannot open include file: 'sal.h'
Please advice.
|
|
|
|
|
Did you set it before "$(VCInstallDir)PlatformSDK\include"?
|
|
|
|
|