在vs2008下创建代理存根DLL时碰到的问题

代理存根DLL的创建的步骤:

1. 通过MIDL编译器自动生成 projectXX.h,dlldata.c,projectXX_i.c,projectXX_p.c文件.

       我使用的命令:midl /h iface.h /iid guids.c /proxy proxy.c server.idl

2. 在vs2008下创建一个空的动态链接库工程,用midl编译器生成的iface.hguids.cproxy.c、dlldata.c文件添加到工程中

3. 添加一个proxy.def文件,在文件中添加如下类容:

LIBRARY              proxy.dll
DESCRIPTION     'Proxy/Stub DLL'

EXPORTS
                DllGetClassObject     PRIVATE
                DllCanUnloadNow     PRIVATE
                GetProxyDllInfo         PRIVATE
                DllRegisterServer      PRIVATE
                DllUnregisterServer   PRIVATE

4. 对项目工程的属性进行设置:

     在C/C++条目中,选中预处理器,在预处理器定义中添加REGISTER_PROXY_DLL

        链接器条目中,选中输入在附加依赖选项中添加 rpcrt4.lib

然后开始编译,编译通过之后,我用regsvr32 proxy.dll来注册dll,是提示:

模块“prox.dll”已经,但找不到入口点DllRegisterServer......

开始我以为是DllRegisterServer没有定义,导致的问题,我有仔细的看了一下dlldata.c文件,文件里有有一段断码确实定义了

DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID )

DLLDATA_ROUTINES宏是在rpcproxy.h中定义的,这个宏定义的最后又使用了另外一个宏DLLREGISTRY_ROUTINES,定义如下

#define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID )

REGISTER_PROXY_DLL_ROUTINES定义了三个函数DLLMAIN_ENTRY、DLLREGISTERSERVER_ENTRY

DLLUNREGISTERSERVER_ENTRY刚好和上面proxy.def文件中导出的注册和注销函数对应。

在网上找了半天发现一个细节问题漏掉了,要在项目属性链接器->输入->模块定义文件指定模块定义文件proxy.def

然后重新编译之后,在用regsvr32 proxy.dll来注册dll就不会出现错误提示了

貌似以前用vc6.0创建dll的时候,直接将.def文件添加到工程中就可以了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值