硬件设备

时间:2016-07-31 10:07:20

标签: asp.net-mvc-4 javascript-events com event-handling activex

我正在为硬件(卡片刷卡器)设备创建ActiveX控件。我了解ActiveX开发和工作,但我对我的具体情况很不满意。设备SKD (dll文件)具有激活swiper /芯片读取器以便处于监听状态的方法。假设如下:

SDK sdk = new SDK();
sdk.RegisterCallback(GlobalCallback);
sdk.ActivateSwiper();

public void GlobalCallback(op, .., ..)
{
   switch(op) {
     case Swiped:
       readCardData();
       break;
     case TransactionData:
       readData();
       break;
     //. . . . 
}

以上代码仅供参考。 SDK具有针对通过设备触发的任何事件的全局回调方法(例如,刷卡,ICC就位等)。如果SDK正在WPF / WinForm应用程序中使用,那么它非常容易实现。但就我而言,我必须在我的网页上处理javascript中提出的事件。

所以,我已经在ActiveX中公开了一个方法来打开设备,这非常有效:

[Guid("4794D615-BE51-4a1e-B1BA-453F6E9337C4")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(IComEvents))]
public class MyComObject : IComObject
{
   [ComVisible(true)]
   public string ActivateDevice()
   {
      SDK sdk = new SDK();
      sdk.RegisterCallback(GlobalCallback);
      string resultCode = sdk.ActivateSwiper();
      return resultCode;
   }
   //. .  <other code> . . .
}

并在网页中将其用作:

<object id="myComComponent" name="myComComponent" classid="clsid:4794D615-BE51-4a1e-B1BA-453F6E9337C4"></object>
<script language="javascript" type="text/javascript">
      var returnCode = myComComponent.ActivateDevice(); //or by creating ActiveXObject
</script

我也了解了如何在网页上使用ActiveX处理事件。我是从HERE学到的。但是通过调用公开的方法来引发事件来处理事件。在我的情况下,当刷卡时,呼叫将转到GlobalCallback()方法。

Questioins:

  • 有没有解决方法,我可以在我的场景中实现处理程序,使其在javascript上可用?
  • 我在想类似PropertyChanged事件,绑定到一个字符串属性,它保存派生的卡片数据。并且处理程序返回此属性值。有没有像这样的解决方法?我对此一点帮助。

我这样想:

 public static string CARD_DATA;
 public void GlobalCallback(op, .., ..)
 {
    switch(op) {
      case Swiped:
        CARD_DATA = readCardData();
        //and CARD_DATA is bound to property-changed event, and its handler returns its value.
        //other code

这甚至可能吗?如果是这样,会暴露什么?以及如何使用它?因为这个属性将在内部更改,当刷卡时,执行case Swiped:。有没有解决方法?

其他信息:

  • Web App是基于MVC 4的famework
  • 设备为The Augusta (IDTech)(他们没有web的actieX /插件)

0 个答案:

没有答案