進程外服務器的代理存根DLL的創建

進程外服務器的代理存根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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章