MFC C++ 有关接口调用函数的几个问题
希望能够一句一句的解释,谢谢各位大神了。
HMODULE hDll =( HMODULE )LoadLibrary( "COMObj.dll" );
MYCREATEINSTANCE MyCreate = (
    MYCREATEINSTANCE )GetProcAddress( hDll,"MyCreateInstance" );
IUnknown * piUnknown = MyCreate();
IMath * piMath = NULL;
piUnknown->QueryInterface(IID_IMath,(LPVOID*)&piMath);
piUnknown->Release();
return piMath;

4个回答

 HMODULE hDll =( HMODULE )LoadLibrary( "COMObj.dll" ); //加载com对象,返回dll的句柄
MYCREATEINSTANCE MyCreate = (
    MYCREATEINSTANCE )GetProcAddress( hDll,"MyCreateInstance" ); 创建MyCreateInstance函数指针的实例,叫MyCreate
IUnknown * piUnknown = MyCreate(); 调用MyCreate函数指针,也就是调用这个函数,创建com对象
IMath * piMath = NULL;
piUnknown->QueryInterface(IID_IMath,(LPVOID*)&piMath); 从IUnknown接口调用QueryInterface得到IMath,IID_IMath是progid
piUnknown->Release(); 释放
return piMath; 返回Math对象指针

QueryInterface进一步介绍
http://www.cnblogs.com/fangyukuan/archive/2010/06/02/1750377.html

加载dll,获取对应句柄,然后根据函数名获取函数地址
调用函数,获取实例指针,再依次调用对象的成员函数,获取接口,返回接口对象

理解这个要理解COM组件原理才好。
参考:http://blog.sina.com.cn/s/blog_5698c05f0100lp1t.html

你好,你知道怎么弄积分的吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问