我正在为硬件(卡片刷卡器)设备创建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:
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:
。有没有解决方法?
其他信息: