我写了一个idl,用midl编译后生成了四个文件。
怎样用他们编译出一个proxy/stub dll?

解决方案 »

  1.   

    其中有个文件名为<your project name>ps.mk,这是个make文件,用VC的bin目录里的nmake编译,就生成proxy/stub
      

  2.   

    可以把 MIDL 生成的<your project name>ps.mk 更名为.mak,用vc打开这个文件,vc提示你将会用此.mak文件新建一个项目,然后build这个项目即可!
      

  3.   

    1.建立服务器,定义接口类型为Apartment,Custom,yes,并添加方法,其中可使用  在IDL文件中定义的数据类型。定义形式:
      typedef struct
      {
      int l;
      char df[200];
      }MYSTRUCT;
    2.建立客户端,复制IID,CLSID定义文件,并包含接口定义文件.c
      这时使用OLE/COM viewer将该接口对象设置为LOCAL型,实现本地调用ocreateInstance(..LOCAL_SERVER..),  这时候还不能实现COM的远程调用,因为还没有注册代理/存根文件。3.编译代理文件,nmake -f ps.mk生成大约24k的ps.dll文件,然后用regsvr32 ps.dll注册它。
      目前为止,已经可以运行客户程序,但是会出现乱字符等问题,代理没有正常运行,问题出在代理上,需要将返回的参数用[out]标记,这样汇集器便能正常工作了。
    4.对注册表的修改,最好使用DCOMCNFG和OLE/COM viewer配置
      (1)将接口对象的进程内服务器设为代理DLL文件
      (2)将代理进程设为server.EXE文件,本地服务器可以不设
      (3)修改DCOMCNFG,将DCOM设为[开启],默认身份验证为[无],模拟级别为匿名5.现在可以使用分布通信了,客户只要安装 代理和GUI 就可以了6.要在定制接口中使用字符串,必须在IDL文件中使用[string][in]