1 、《com原理及应用》第四章中,
用midl产生的文件加上一个def文件代理存根dll。
我不明的是明明没有实现 DllGetClassObject
DllCanUnloadNow
GetProxyDllInfo
DllRegisterServer
DllUnregisterServer
这五个函数,但还是要用def引出?引出的究竟是什么东西?
2、如果做一个进程内组件,把midl产生的文件全都加到工程里,
所生成的dll里是否也含有代理存根?
用midl产生的文件加上一个def文件代理存根dll。
我不明的是明明没有实现 DllGetClassObject
DllCanUnloadNow
GetProxyDllInfo
DllRegisterServer
DllUnregisterServer
这五个函数,但还是要用def引出?引出的究竟是什么东西?
2、如果做一个进程内组件,把midl产生的文件全都加到工程里,
所生成的dll里是否也含有代理存根?
解决方案 »
- 下面三个图中是什么控件?
- vc的设置中会用"$(VCInstallDir)"之类的变量来表示路径,怎样查看、修改"VCInstallDir"的定义?
- 利用CArchive建立双向数据流
- Firefox是用什么写的?
- [基础版公告]针对已解决问题不揭帖的处理-本贴谢绝UP
- 再问:如何在断点条件中设置关于字符串的条件?关键是不知道关于字符串的断点条件怎么写。
- vc中如何将程序(调用了DLL)与被调用的dll绑定一起调试(DLL已有源码),能解答者给分
- 寻找vcbear,关于receive接收字符时遇0即停止的原因
- 学VC我应该如何入门?
- 请问用ODBC的函数怎样把二进制数据存入数据库。
- 在一个接口中加一个method出问题了
- 如何获取网上某一主机的网卡地址?急急!高分请问!
例如:#include <rpcproxy.h>#ifdef __cplusplus
extern "C" {
#endifEXTERN_PROXY_FILE( DBFServer )
EXTERN_PROXY_FILE( ReceItfc )
PROXYFILE_LIST_START
/* Start of list */
REFERENCE_PROXY_FILE( DBFServer ),
REFERENCE_PROXY_FILE( ReceItfc ),
/* End of list */
PROXYFILE_LIST_END
DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID )#ifdef __cplusplus
} /*extern "C" */
#endif/* end of generated dlldata file */DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID )
展开以后是:
// the dll entry points that must be defined
#define DLLDATA_ROUTINES(pProxyFileList,pClsID ) \
\
CLSID_PSFACTORYBUFFER \
\
CStdPSFactoryBuffer gPFactory = {0,0,0,0}; \
\
DLLDATA_GETPROXYDLLINFO(pProxyFileList,pClsID) \
\
DLLGETCLASSOBJECTROUTINE(pProxyFileList,pClsID,&gPFactory) \
\
DLLCANUNLOADNOW(&gPFactory) \
\
CSTDSTUBBUFFERRELEASE(&gPFactory) \
\
CSTDSTUBBUFFER2RELEASE(&gPFactory) \
\
DLLDUMMYPURECALL \
\
DLLREGISTRY_ROUTINES(pProxyFileList, pClsID) \
\ // more code goes here...这些宏里就包含了上述的函数。如:
DLLCANUNLOADNOW(&gPFactory)
展开以后是:
#define DLLCANUNLOADNOW(pFactory) \
HRESULT STDAPICALLTYPE DLLCANUNLOADNOW_ENTRY() \
{ \
return NdrDllCanUnloadNow( pFactory ); \
}这下子,你就明白了吧!进程内组件,一般是不需要代理的。至于代码里是否包含代理存根代码,是取决于你创建DLL组件时,是否允许合并代理存根代码的选项。