#include "stdafx.h"
#include "InterFace.h"
#include <iostream.h>
#include <objbase.h>
int main(int argc, char* argv[])
{
CoInitialize(NULL);//初始化COM库 void *p;
if (CoGetClassObject(mycomid,CLSCTX_INPROC_SERVER,NULL,beastid,(void**)&p)==S_OK)
{
cout<<"OK"<<endl;
}
else
{
cout<<"error"<<endl;
}
CoUninitialize(); return 0;
}
=====================================COM部分
STDAPI DllGetClassObject(REFCLSID rclsid,REFIID riid, LPVOID * ppv)
{
cout<<"调用了DllGetClassObject函数"<<endl;
char buff[39]={0};
LPOLESTR wszCLSID = NULL; StringFromCLSID(rclsid, &wszCLSID);//将CLSID转换成STRING
wcstombs(buff, wszCLSID, 39) ;
cout<<"请求CLSID为:"<<buff<<endl; StringFromCLSID(riid, &wszCLSID);//将IID转换成STRING
wcstombs(buff, wszCLSID, 39) ;
cout<<"请求IID为:"<<buff<<endl; return S_OK;}
========================运行结果======================
调用了DllGetClassObject函数
请求CLSID为:{9FDB6FC7-59B8-4EF7-94D9-3A0CDA824204}
请求IID为:{E940B840-0581-44EA-AF3D-E00D99E48E19}
Press any key to continue--程序崩溃了
===============================================
为什么执行程序流程没有回到客户端MAIN函数啊,按道理说
最后回执行
cout<<"OK"<<endl;
我理解是其实类厂什么的可以忽略,因为程序流程进入DllGetClassObject
后 我们其实就已经掌握了程序运行的控制权利了不是吗
#include "InterFace.h"
#include <iostream.h>
#include <objbase.h>
int main(int argc, char* argv[])
{
CoInitialize(NULL);//初始化COM库 void *p;
if (CoGetClassObject(mycomid,CLSCTX_INPROC_SERVER,NULL,beastid,(void**)&p)==S_OK)
{
cout<<"OK"<<endl;
}
else
{
cout<<"error"<<endl;
}
CoUninitialize(); return 0;
}
=====================================COM部分
STDAPI DllGetClassObject(REFCLSID rclsid,REFIID riid, LPVOID * ppv)
{
cout<<"调用了DllGetClassObject函数"<<endl;
char buff[39]={0};
LPOLESTR wszCLSID = NULL; StringFromCLSID(rclsid, &wszCLSID);//将CLSID转换成STRING
wcstombs(buff, wszCLSID, 39) ;
cout<<"请求CLSID为:"<<buff<<endl; StringFromCLSID(riid, &wszCLSID);//将IID转换成STRING
wcstombs(buff, wszCLSID, 39) ;
cout<<"请求IID为:"<<buff<<endl; return S_OK;}
========================运行结果======================
调用了DllGetClassObject函数
请求CLSID为:{9FDB6FC7-59B8-4EF7-94D9-3A0CDA824204}
请求IID为:{E940B840-0581-44EA-AF3D-E00D99E48E19}
Press any key to continue--程序崩溃了
===============================================
为什么执行程序流程没有回到客户端MAIN函数啊,按道理说
最后回执行
cout<<"OK"<<endl;
我理解是其实类厂什么的可以忽略,因为程序流程进入DllGetClassObject
后 我们其实就已经掌握了程序运行的控制权利了不是吗
return AfxDllGetClassObject(rclsid, riid, ppv);
记住:在对象创建过程中,有COM系统(SCM)的参与,只有对象成功创建后,客户才是与对象直接交互。你把return S_OK 改为 return CLASS_E_CLASSNOTAVAILABLE.