何日も試してみましたが、これを理解できません。ローカル シリアル ポートを制御するイントラネット アプリ用の 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) ブロックから)「未定義」のエラーが生成されます。何か案は?前もって感謝します....... ボブ