0

何日も試してみましたが、これを理解できません。ローカル シリアル ポートを制御するイントラネット アプリ用の C# クラス ファイルを作成しました。regasm を使用して dll を手動で登録するとうまく機能しますが、このコントロールを手動で登録せずに Web ページから展開する必要があります。Visual Studio 2010 でセットアップ プロジェクトを作成しようとしましたが、正常にコンパイルされましたが、Web ページでオブジェクトを開くことができません。

私の C# クラスの関連するコード行は次のとおりです。

namespace wmsSerialPorts
{
[Guid("55D31498-12A5-4FF0-942D-3B0BA449CA7B")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [ComVisible(true)]
      public interface iAxDevices
    {
        [DispId(1)]
        int OpenPort(string sComPort);
        [DispId(2)]
        int ClosePort();
        [DispId(3)]
        int SendCmd(string sCmd);
        [DispId(4)]
        string GetLastError();
        //[DispId(5)]
        //string ReadLine();
        [DispId(6)]
        string ReadWeight();
        [DispId(7)]
        Microsoft.JScript.ArrayObject GetJsPorts();
        [DispId(8)]
        void prtLabel(string sItemNum, string sQty, string sDesc, string sWoNum, string sBoxID, string sBoxIDBarCode, string sBoxIDorig);
        [DispId(9)]
        void prtLabelQC(string sItemNum, string sQty, string sDesc, string sWoNum, string sBoxID, string sBoxIDBarCode, string sBoxIDorig, string sNeedDate, string sRecOverride);
        [DispId(10)]
        void prtReset();
    }

[Guid("E59C5B7E-EF1F-4241-A9FD-191EF8FCC167")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComVisible(true)]
    [ProgId("AxDevices")]
    public class AXDevices : wmsSerialPorts.SerialCom, iAxDevices, wmsSerialPorts.IObjectSafety

前述したように、regasm wmsSerialPorts.dll を使用すると、オブジェクトは次のように JavaScript から呼び出すとうまく機能します。

myAx = new ActiveXObject("AXDevices");

私のセットアップ プロジェクトには、wmsSerialPorts.inf ファイルが含まれています。

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Setup Hooks]

install=install

[install]

run=msiexec.exe /package """%EXTRACT_DIR%\ActiveXSetup.msi""" /qn

.... および ActiveXBuild.ddf ファイル:

.Set DiskDirectoryTemplate=cab

.Set CabinetNameTemplate=ActiveXSetup.cab

Debug\ActiveXSetup.msi

wmsSerialPorts.inf

私の wmsSerialPorts.dll ファイルは分離されたアセンブリとして適切に参照されており、セットアップ プロジェクトをビルドすると、期待どおりに ActiveXSetup.cab および ActiveXSetup.msi ファイルが作成されました。

次に、オブジェクトをロードするために次の HTML ページを作成しました。

<!DOCTYPE>
<html>
<head>
    <title>Test</title>
</head>
<body>
<!--    <object id="AXDevices" classid="clsid:E59C5B7E-EF1F-4241-A9FD-191EF8FCC167" codebase="https://10.0.2.53/BIDWMS/ActiveXSetup.cab">
    </object>-->
        <object id="AXDevices" classid="clsid:E59C5B7E-EF1F-4241-A9FD-191EF8FCC167" codebase="ActiveXSetup.cab">
    </object>
    <script type="text/javascript">
        try {
            var obj = document.AXDevices;
            if (obj) {
                alert(obj.SayHello());
            } else {
                alert("Object is not created!");
            }
        } catch (ex) {
            alert("Error message is: " + ex.Description);
        }
    </script>
</body>
</html>

...しかし、ページを実行すると、(catch(ex) ブロックから)「未定義」のエラーが生成されます。何か案は?前もって感謝します....... ボブ

4

1 に答える 1

0

コードベースは、ファイル名だけでなく URL でなければなりません。ファイルが C:\inetpub\myCabFiles\ActiveXSetup.cab にあり、Web サイトが C:\inetpub にある場合、コードベースは次のようになります。

codebase="www.mywebsite.com\myCabFiles\ActiveXSetup.cab"
于 2012-09-06T19:14:54.493 に答える