进程外服务器的代理存根DLL的创建

来源:互联网 发布:javascript编程视频 编辑:程序博客网 时间:2024/06/06 01:06

进程外服务器的代理存根DLL的创建


源代码下载

http://download.csdn.net/source/1792728


源自于一位网友的提问
http://topic.csdn.net/u/20091101/20/10b3651a-7494-44fb-9861-fb2d3c5134d7.html?72825
问题描述 : 客户端调用进程外组件接口时,由于要获取的不是缺省的接口(IUnknown,IDispath),因此在请求IMatch接口是返回
80004002错误,该错误表示组件不支持该接口.
出错的原因 :跨进程或跨套间调用接口时,需要代理存根的支持.上述问题出错的原因也就是缺少代理存根DLL.

代理存根DLL的创建 :
1.通过MIDL编译器自动生成 projectXX.h,dlldata.c,projectXX_i.c,projectXX_p.c文件
  对于vc6.0,在文件视图(FileView)树形栏中,找到接口定义的idl文件,点击右键,单击setting,在Custom Build选项卡中输入一下信息.
  Description:
      Compiling Interface Definition

   Build Commands:
      midl.exe /ms_ext /char unsigned /c_ext /out "$(InputDir)"
      "$(InputPath)"

   Output File(s):
      $(InputDir)/$(InputName).h
      $(InputDir)/dlldata.c
      $(InputDir)/$(InputName)_i.c
      $(InputDir)/$(InputName)_p.c

2.设置完后,在idl文件处,再次点击右键选择编译projectXX.idl文件.
  做完这一步之后,在项目文件夹下面我们会找到上述的四个文件.

3.在新的项目工作区或现有的工作区中,创建一个态链接库项目.将前面的四个文件添加到该项目之中.
  并新建一个PSProjectXX.def文件.输入一下内容,保存后添加到项目之中.
      LIBRARY     PSProjectXX
      DESCRIPTION 'Sample custom interface marshaler'
      EXPORTS
         DllGetClassObject PRIVATE
         DllCanUnloadNow PRIVATE
         DllRegisterServer PRIVATE
         DllUnregisterServer PRIVATE

4. 打开project->setting,然后选择您的项目,单击c + + 选项卡并添加到预处理器定义字段的值REGISTER_PROXY_DLL以及_win32_winnt=0x400;
   在link选项卡的Genernal->Object/library modules栏中添加一下类库:rpcndr.lib rpcns4.lib rpcrt4.lib
 

5. 在项目属性 (或设置) 的自定义生成步骤部分中键入下列值,然后关闭生成设置对话框:
  Description:
      Registering Custom Interface Marshaler

   Build Command(s):
      regsvr32 /s /c "$(TargetPath)"
      echo regsvr32 exe. time > "$(OutDir)/regsvr32.trg"

   Output File(s):
      $(OutDir)/regsvr32.trg
6.编译,搞定.

源代码下载

http://download.csdn.net/source/1792728

 

原创粉丝点击