刚开始学COM,想在组件中做一个对话框,然后由客户端调用显示,代码:
STDMETHODIMP_(void) CLoginObj::XLogin::OpenLogin()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());   
CLoginDlg dlg;
dlg.DoModal();
}
CLoginObj为组件类,XLogin为嵌套类,实现接口ILogin:
class ILogin:public IUnknown
{
public:
virtual void __stdcall OpenLogin()=0;
};客户端调用代码:
IUnknown* pUnknown;
ILogin* pLogin;
HRESULT hResult;
//加载COM
if (CoInitialize(NULL) != S_OK) {
MessageBox("Initialize COM library failed!");
}
GUID dictionaryCLSID;
//获取组件CLSID
hResult = ::CLSIDFromProgID(L"DSLogin.Object", &dictionaryCLSID);
if (hResult != S_OK) 
{
MessageBox("Can't find the dictionary CLSID!");
}
//调用类场加载组建对象
hResult = CoCreateInstance(dictionaryCLSID, NULL, 
CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&pUnknown);
if (hResult != S_OK) 
{
MessageBox("Create object failed!");
}
//获取接口对象
hResult = pUnknown->QueryInterface(IID_Login, (void **)&pLogin);
if (hResult != S_OK) {
pUnknown->Release();
MessageBox("QueryInterface IDictionary failed!");
//return -3;
}
 //调用显示窗口函数
pLogin->OpenLogin();
CoUninitialize();
以上就是我写的代码,可是运行后并不能显示窗口,如果在组件的OpenLogin()函数中,加入AfxMessageBox(“xxx”);这个messagebox可以显示,但是窗口还是不显示,已经加了AFX_MANAGE_STATE(AfxGetStaticModuleState());   可是不做成COM组件,如果做基本的dll,然后加载,就可以正常显示窗口有大虾能帮忙解释下吗?万分感谢~~~~~~~