我的程序原是C/S结构,现在想做成B/S结构问题是:
原来用到的读写设备的dll如何做到IE可用的COM或ACTIVE X 控件并且我没有dll的原代码,只有函数说明与定义
客房端原来还有配置文件,要不然有dll也没有用

解决方案 »

  1.   

    将DLL打成CAB包,就可以在IE中引用了!
      

  2.   

    如何打dll为cab包啊(两个dll文件)
    原来应用程序下的文件夹和dat配置文件也可以吗
      

  3.   

    用VB将第三方控件打成CAB包(在WEB页面上使用)
    由于工作的需要,笔者需要在WEB页面上显示CAD文件(在客户机器上不装CAD)。由于时间紧迫,现写控件根本来不及,没办法在网上搜寻了一圈。找到了一个软件,大小大概有8兆左右。可以用来浏览DWG类型的文件。用了一下,发现其用的是一个DLL类型的控件,并带有两个附属的DLL文件。
    如果要在WEB页面上使用控件,则控件需要打成CAB类型的包。上网找了一个打CAB包的工具,名字叫IExpress。不过如果用这个工具打包需要手工编写INF文件,INF文件的结构比较复杂,手工编写容易出现错误。想了一下,觉得VB自带的打包工具可以制作CAB文件包。不过VB的打包工具开始必须选择一个VB的工程。所以用VB建了一个跟控件名称一样的工程,编译了一下,然后用VB自带的工具进行打包,打包的类型选择Internet类型的安装包。到选择文件这一步的时候,要将多余的文件去掉,因为这个第三方控件不是VB编写的,所以根本不用带VB的运行库。将第三方控件的主控件DLL和两个附属的DLL都加到包中,然后开始打包。
    包打完之后写了个测试页,在本机上试了一下没有问题(因为本机已经安装了控件),所以在其他的机器上测试了一下,不能正常安装控件,页面上显示一个红叉。查看IE临时文件夹下的控件安装日志文件,内容显示控件不能正常注册。到网上查找了一些资料,没有找到原因。后来用VC自带的Dependency Walker工具查看了一下控件的DLL,发现里边还包含了另外三个DLL,分别为:msvcr71.dll、msvcp71.dll、mfc71.dll。将这三个文件也加进了包里,测试之后,一切正常。在WEB页面上使用控件的脚本如下:<HTML>
    <HEAD>
    <TITLE>BravaACX.CAB</TITLE>
    </HEAD>
    <BODY>
    <!-- 如果这页上的任何控件需要授权,您必须
    创建一个授权包文件。 运行 LPK_TOOL.EXE 来创建
    要求的 LPK 文件。 LPK_TOOL.EXE 将从 ActiveX SDK 中找到,
    http://www.microsoft.com/intdev/sdk/sdk.htm. 如果您有 Visual
    Basic 6.0 CD, 您可以在\Tools\LPK_TOOL 目录下找到它。 下面是对象标记的例子:<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
    <PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
    </OBJECT>
    --><OBJECT ID="ctlBravaACXView" CLASSID="CLSID:1BE73243-A85F-4385-939D-14D4845A286A"
    CODEBASE="BravaACX.CAB#version=5,1,0,5" width="60%" height="60%">
    <param name="Filename" value="db_samp.dwg">
    </OBJECT></BODY>
    </HTML>打包CAB控件的INF文件内容为:;BravaACX.OCX 的 INF 文件
    ;DestDir 可以为 10 则在 Windows 目录,为 11 则在 Windows\System(32) 目录,或为空则在 Occache 目录。[version]
    signature="$CHICAGO$"
    AdvancedINF=2.0
    [DefaultInstall]
    CopyFiles=install.files
    RegisterOCXs=RegisterFiles
    [RInstallApplicationFiles]
    CopyFiles=install.files
    RegisterOCXs=RegisterFiles
    [DestinationDirs]
    install.files=11
    [SourceDisksNames]
    1=%DiskName%,BravaACX.CAB,1[Add.Code]
    BravaACX.dll=BravaACX.dll
    Autorec.dll=Autorec.dll
    BACXView.ini=BACXView.ini
    Dwg2DL.dll=Dwg2DL.dll
    myrdrv.ini=myrdrv.ini
    MFC71.dll=MFC71.dll
    msvcr71.dll=msvcr71.dll
    msvcp71.dll=msvcp71.dll
    [install.files]
    BravaACX.dll=BravaACX.dll
    Autorec.dll=Autorec.dll
    BACXView.ini=BACXView.ini
    Dwg2DL.dll=Dwg2DL.dll
    myrdrv.ini=myrdrv.ini
    MFC71.dll=MFC71.dll
    msvcr71.dll=msvcr71.dll
    msvcp71.dll=msvcp71.dll
    [SourceDisksFiles]
    BravaACX.dll=1
    Autorec.dll=1
    BACXView.ini=1
    Dwg2DL.dll=1
    myrdrv.ini=1
    MFC71.dll=1
    msvcr71.dll=1
    msvcp71.dll=1[BravaACX.dll]
    file-win32-x86=thiscab
    RegisterServer=yes
    clsid={1BE73243-A85F-4385-939D-14D4845A286A}
    DestDir=11
    FileVersion=5,1,0,5[Autorec.dll]
    file-win32-x86=thiscab
    RegisterServer=no
    DestDir=11
    FileVersion=1,3,0,43[BACXView.ini]
    file-win32-x86=thiscab
    RegisterServer=no
    DestDir=11
    FileVersion=0,0,0,0[Dwg2DL.dll]
    file-win32-x86=thiscab
    RegisterServer=no
    DestDir=11
    FileVersion=1,3,0,47[myrdrv.ini]
    file-win32-x86=thiscab
    RegisterServer=no
    DestDir=11
    FileVersion=0,0,0,0[MFC71.dll]
    file-win32-x86=thiscab
    RegisterServer=no
    DestDir=11
    FileVersion=7,10,3077,0[msvcr71.dll]
    file-win32-x86=thiscab
    RegisterServer=no
    DestDir=11
    FileVersion=7,10,3052,4[msvcp71.dll]
    file-win32-x86=thiscab
    RegisterServer=no
    DestDir=11
    FileVersion=7,10,3077,0
    [RegisterFiles]
    %11%\BravaACX.dll
      

  4.   

    http://blog.csdn.net/cuizm/archive/2005/01/22/WEB_CAB.aspx
      

  5.   

    我的程序原是C/S结构,现在想做成B/S结构问题是:
    原来用到的读写设备的dll(两个)如何做到IE可用的COM或ACTIVE X 控件并且我没有dll的原代码,只有函数说明与定义
    如何包装呢客房端原来还有配置文件,要不然有dll也没有用结构如
    folder |
            a.dll
            b.dll
           |subfolder 
                     |
                       c.dat
                       d.ini
      

  6.   

    <OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
    <PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
    </OBJECT>
    中classid从何而来,下面怎么就可以和dwg文件对接呢
      

  7.   

    崔占民cuizm的总结不错的。==============
    <OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
    <PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
    </OBJECT>
    中classid从何而来,下面怎么就可以和dwg文件对接呢===============你可以试着用FrontPage或InterDev引入一个ActiveX控件,classid就会自动生成,另外一些打包工具也可以帮你获取到。