本人现在遇到如下问题,迫切需要解决,希望高人指教!环境(局域网中,服务器(2000系统,安装SQL-SERVER数据库),本机)
本人编写了一个DLL和一个EXE文件
当在本机上操作时
只需在EXE的程序中加入代码
Dim objServer As Object
    Set objServer = CreateObject("DLL文件名.类模块名")
然后通过 objServer.函数名(各项参数)
即可调用DLL文件中的函数,完成功能
现在我需要在局域网中实现,当把DLL文件放到服务器的机器上后,
我需要怎么编写代码,才能使我的客户端EXE文件中调用到服务器端DLL文件中的函数急 急 急 希望大侠们帮帮小弟我解决以上的问题啊

解决方案 »

  1.   

    Dim objServer As Object
    Set objServer = CreateObject("DLL文件名.类模块名","服务器名称orIP")当然前提是DLL在服务器上注册,再配置成DCOM。使用DCOM,特别需要保护客户端,有些错误是你无法避免的
    比如错误429
      

  2.   

    已經回復:
    http://community.csdn.net/Expert/topic/4681/4681411.xml?temp=.234646
      

  3.   

    1.1怎样在服务器布署全新的DCOM服务
    1) 将DCOM拷贝到指定目录
    2) 执行DCOM文件.EXE/REGSERVER
    3) 执行DCOMCNFG,点开该DCOM的条目,选中安全性TAB表项
    ->点中使用自定义访问权限,再按编辑按钮->添加Everyone All Access->确定
    ->点中使用自定义启动权限,再按编辑按钮->添加Everyone All Launch->确定
    ->确定该DCOM条目
    4) 选中标识TAB表项,需要指定启动用户或需要使用交互式用户
    *指定交互式用户后,在WINDOWS XP+WINDOWS 2000 SERVER下通过DCOM测试
    此步骤必须用到一个DCOM在DCOMCNFG中显示出的所有条目
    5)在客户端注册DCOM的VBR文件A.DLL注册,应该是REGSVR32 *.DLL
    B.权限问题自己考虑,建议测试使用EVERYONE
    C.DLL的VBR文件在VB编译器中选择DCOM
    D.喜欢你死了,自己去摸索吧
      

  4.   

    请问" donghaima(你知道我多么爱大海) "这位大哥
    DLL文件是不是必须要放在system32下进行注册
    如何将DLL文件配置成DCOM
    如果计算机名字是NAME,局域网内的IP地址是192.168.1.1
    那么具体调用时怎么写
    谢谢 指教
      

  5.   

    我没有找到DLL的VBR文件 请问该文件如何生成
      

  6.   

    DLL可以放在任何目录;
    在编译DLL的时候,菜单->工程->工程属性->组件->选中Remote Server Files,编译后就会有VBR文件。Dim objServer As Object
    Set objServer = CreateObject("DLL文件名.类模块名","NAME")OR Dim objServer As Object
    Set objServer = CreateObject("DLL文件名.类模块名","192.168.1.1")
      

  7.   

    有一点忘掉了,也许DLL,只能是COM+,EXE可以DCOM,反正客户端是一样的
    如果是COM+,就要到控制面板里去设置了,也简单的。
      

  8.   

    谢谢 VBR文件现在已经编译出来了 
    现在
    C.DLL的VBR文件在VB编译器中选择DCOM
    这步怎么操作才可以得到 DCOM 阿
    我不会
    真是知道的太少了
    要好好像你学习了  大哥
      

  9.   

    那具体怎么生成COM+ 然后再怎样到控制面板里去设置阿?
      

  10.   

    To: donghaima(你知道我多么爱大海)  
    大哥,还在不在阿,希望看到后,继续帮我解决一下阿
    谢谢
      

  11.   

    吃饭饭.这段时间,是不是可以尝试把你的DLL,写成ACTIVEX EXE
      

  12.   

    吃饭饭.这段时间,是不是可以尝试把你的DLL,写成ACTIVEX EXE
    --------------------------------
    不至于吧,DLL不是更好,相比之下COM+比DCOM不管是从资源的调配上面还是性能上面,还是安全方面都要强.
      

  13.   

    把你的DLL,复制到服务器目录中,执行regsvr32 ****.dll注册,同样regsvr32 -u ****.dll是反注册.运行dcomcnfg.exe,会跳出一个界面,你把工作在COM+上,
      

  14.   

    1.将目标DLL复制到服务器上,这里假设win2003
    2.注册目标DLL  regsvr32 COMPLUS.DLL3.运行DCOMCNFG
    4.展开组件服务->计算机->我的电脑->COM+应用程序
    5.新建->应用程序,创建一个空应用程序,并起一个名字,比如TEST
    6.展开TEST,在组件上新建->组件
    7.导入已注册的组件,我选择:COMPLUS.CLASS1
    服务器已经设置完成.其他忽略的部分使用默认选项
    在客户机上找到CLIREG32.EXE,可以复制到COMPLUS.VBR的同一个目录,这个目录还需要TLB文件.
    执行CLIREG32.EXE COMPLUS.VBR
    选中DCOM,
    输入COM+所在的地址
    客户机注册完成客户端程序如下:
    Dim oClass As Object
    Set oClass = CreateObject("COMPLUS.CLASS1", "192.168.1.100")
    MsgBox oClass.HelloWorld
    Set oClass = Nothing也可以省略CreateObejct的第二个参数.
      

  15.   

    再说了,如果我的COM+组件,只有几百个还好,如果一套大的系统有成千上万个组件,那么如果再加上频繁的更新,而下面的用户端遍布在全国各地,少则百计,多则千计,那能做得来么?
      

  16.   

    两位高手你们说的我的快要晕掉了 哈哈
    可不可以尽量简单化一点阿
    我很菜的 那么高深的内容 我看不太懂
    我要实现的环境 没那么夸张
    我当前只要满足 在一个局域网内
    大概也就十几二十来个用户 通过客户端的操作 需要访问到服务器上DLL文件,然后通过客户端传输的参数 调用DLL里面函数 来得到结果 返回到客户端上
    现在大致是这样
    请两位大侠帮我解决一下吧
      

  17.   

    对于简单的方法我都已经在你的贴子里回复过了,只是你自己发了那么多贴子都没去理会过
    http://community.csdn.net/Expert/topic/4681/4681397.xml?temp=.4033625
      

  18.   

    大哥 那边我也去看过 只是有些都看不明白阿
    对了 那个RDS 是什么东西
    是不是需要引用什么后 才会出来啊???
      

  19.   

    还有“ donghaima(你知道我多么爱大海) ”
    我用的是2000 SERVER的机器
    那里的配置方法好像跟你2003里面说的不一样
    你可不可以再拿2000 SERVER里面的方法来说明一下阿
    呵呵
    谢谢了
      

  20.   

    RDS在这里用到的是RDS.DataSpace
    在win2000下,他所说的dcomcnfg应该改为:
    %windir%\system32\Com\comexp.msc不过很明显楼主没看我上面给出链接的这一贴,那上面使用的是我提供的另外一组控件,实现起来简单很多。
      

  21.   

    对于rds的相关引用的路径,我就使用一个相对的路径
    %windir%\..\Program Files\Common Files\System\msadc\msadco.dll这里的windir就是你的操作系统目录,如 c:\winnt
      

  22.   

    既然楼主懒,那我就贴过来好了,顺便转换成简体
    ---
    相关DCOM的访问偶只有一套Delphi移植过来的基于Socket的解决方案,使用的是Borland Socket Server来做COM代理,不过原生版SocketServer只支持Delphi和CBuilder生成的COM组件.主要有两个组件,一项是服务器服务组件,是一个exe文件,支持以windows服务模式启动,此服务必须启动才能进行服务,默认端口为211,这个很有可能会被防火墙阻隔掉.
    另一个则是一个客户端的代理DLL,名称叫做EasyDCOMObject.dll,使用方法也很简单,一种是将该DLL在客户端进行注册,然后添加到程序的reference当中,用如下代码即可以使用dim oEasyDCOMObject as new EasyDCOMObject.EasyDCOMObject
    dim oServerObject as Objectset oServerObject=oEasyDCOMObject.GetObj("ServerObject.Class",IP)
    call oServerObject.Method([Parameters])
    set oServerObject=nothing另一种则是不添加到Reference当中去的方法
    dim oEasyDCOMObject as Object
    dim oServerObject as Object
    set oEasyDCOMObject=CreateObject("EasyDCOMObject.EasyDCOMObject")
    set oServerObject=oEasyDCOMObject.GetObj("ServerObject.Class",IP)
    call oServerObject.Method([Parameters])
    set oServerObject=nothing
    set oEasyDCOMObject=nothing相关文件可以到下面的地址下载:
    http://iemis.vicp.net/RemoteCOMAccessAgent.zipBTW:
    下载后请先使用杀毒软件进行查毒,若发现病毒或异常可以及时同本人联系.不过EasyDCOMObject的Source可以提供(是Borland C++ Builder 6写的),而SocketServer的修改版本Source已经由于丢失,虽然可以改出来,但是还是有一定的麻烦度,当然也可以自行修改,即可对相关的组件(其中使用的是ProgID)进行审核时,去除对Borland相关信息的判断,从而实现其它开发工作开发的COM的代表.
      

  23.   

    对了我先用了“donghaima(你知道我多么爱大海)”的方法
    在2000的系统里面也都已经按照步骤配置好了
    可是我在客户端 运行后
    在调用时 提示我
    实时错误 '429';
    ActiveX 部件不能创建对象
    是什么原因
    可以帮我解决下哇?
      

  24.   

    unsigned僵哥 你的那玩意真是好啊
    可是万一像你说的那个通道被封掉的话 我该通过什么方法去修改实现阿
    还有 你可不可以 教我 帮我把刚才的这个
    (在2000的系统里面也都已经按照步骤配置好了
    可是我在客户端 运行后
    在调用时 提示我
    实时错误 '429';
    ActiveX 部件不能创建对象
    是什么原因
    可以帮我解决下哇?)
    问题解决一下阿
    多学种方法 我想可以多一份保障阿 呵呵
    万一到时候 正式开始调试了 出来就完蛋了 呵呵 
    谢谢
      

  25.   

    在客户机上找到CLIREG32.EXE,可以复制到COMPLUS.VBR的同一个目录,这个目录还需要TLB文件.
    执行CLIREG32.EXE COMPLUS.VBR
    选中DCOM,
    输入COM+所在的地址
    客户机注册完成以上步骤怎么操作阿
    我找到了CLIREG32.EXE文件 但是跟编译出来的VBR文件放到一起后 双击运行后我也看到提示了 但是具体那些设置 如上面说的 
    选中DCOM,
    输入COM+所在的地址
    具体怎么操作 我没找到在哪里可以选择什么的 
    请大哥们指教阿
      

  26.   

    看到了 跳出个对话框 
    显示提示
    请在命令行指定一个 .VBR 文件
    然后只有一个确定按钮 按完后出来一个界面
    上面写了
    用法:CLIREG32<VBRFile>[选项]
    有效选项为:
    ..........
    噢 是不是 就是像注册文件一样 要在运行里面弄的阿
      

  27.   

    喜欢死你了,我不是写得很明白,看来你擅长不仔细看文字,包括但不限于说明,帮助。在客户机上找到CLIREG32.EXE,可以复制到COMPLUS.VBR的同一个目录,这个目录还需要TLB文件.-> 执行CLIREG32.EXE COMPLUS.VBR <-明白了没有呢?????!!!!!!选中DCOM,
    输入COM+所在的地址
    客户机注册完成
      

  28.   

    大哥 就是
    -> 执行CLIREG32.EXE COMPLUS.VBR <-
    这句 具体怎么执行阿 呵呵
    我就是到这里弄不下去了 
    拜托 通俗点说明一下吧 大哥
      

  29.   

    我的意思是怎么样 算 执行这两个文件 具体的操作?
    因为我放到运行里面也试过了不行
    然后直接双击 也不行
    所以我不知道 怎么样操作这一步 呵呵
    -> 执行CLIREG32.EXE COMPLUS.VBR <-
    大哥 帮忙啊
      

  30.   

    在MS-DOS方式下执行。在运行->cmd,就会弹出MS-DOS窗口,CD到指定目录。比如你的程序目录是D:\XXX
    那你进入D:\XXX后
    输入CLIREG32.EXE COMPLUS.VBR 回车以后的注册可以写在VB程序中。
      

  31.   

    unsigned僵哥 你的那玩意真是好啊
    可是万一像你说的那个通道被封掉的话 我该通过什么方法去修改实现阿
    ----------------
    EasyDCOMObject支持端口设置以及访问类型设置,只不过设置是使用Socket方式,其实还支持Web方式和DCOM方式。
    oEasyDCOMObject.InvokeType=eoiSocketInvoke 'Socket访问方式
    oEasyDCOMObject.Port=211 '默认端口这些都是可以设置的当然使用
    eoiDCOMInvoke
    时与直接使用CreateObject没什么区别
    eoiwebISAPIInvoke
    是使用的Web访问模式,该访问方式需要另一个Borland开发的另一个ISAPI组件支持,并且这个大部分反应说是不太稳定,所以这就不给出来了。使用它还不如直接使用RDS,并且RDS相对控制上又多了一级访问授权(注册表项)
      

  32.   

    还没呢 僵哥那个没问题了 我下载了 他的一个EXE和一个DLL文件后 OK了
    但是你教的那种不行啊 我运行后 报给我
    实时错误 '429'
    ActiveX 部件不能创建对象
    哎 还在郁闷中呢