实现COM接口C ++ / VC ++ 6.0 / MFC

时间:2011-07-06 17:03:06

标签: c++ visual-c++ com atl

入门级程序员在这里尝试实现COM接口。我正在开发一个与Aloha销售点系统接口的程序。 Aloha使用COM来处理外部程序。我试图拦截来自磁卡读卡器的卡数据,这是一个OPOS读卡器,而不是键盘楔。我的文档没有解释如何实现这个特定的接口,但它确实解释了如何实现类似的接口。我试图按照这个例子,但我没有在哪里。 Aloha的支持是不存在的,他们的文档很差,过时,有时只是错误,即使我已经支付了许可证。

我尝试制作一个简单的应用程序来测试此功能。这是我做的:

1)使用ATL COM app向导在vc ++ 6.0中创建一个新项目 2)服务器类型dll 3)插入新的atl对象 - >简单的对象 4)右键单击我的新类并选择实现接口 5)浏览类型库,选择Iber.tlb(Aloha的t​​lb) 6)选择我想要实现的界面

那是一个.h,.cpp和.rgs文件。

.h文件有:

public:
// IInterceptMagcard
    STDMETHOD(InterceptMagcard)(BSTR bstrAccountNumber, BSTR bstrCustomerName, BSTR bstrExpirationDate, BSTR bstrTrack1Info, BSTR bstrTrack2Info, BSTR bstrTrack3Info, BSTR bstrRawMagcardData, LONG * bWasDataHandled)
    {
        if (bWasDataHandled == NULL)
            return E_POINTER;

        return E_NOTIMPL;
    }

这是我实现代码的地方吗?我在那里放了一些测试代码来写出一个txt文件来测试它。然后我用了:

HRESULT hr = CoCreateInstance(CLSID_AlohaMag, NULL, CLSCTX_INPROC_SERVER,
                                IID_IAlohaMag, (void **) &g_pIInterceptMagcard);

其中g_pIInterceptMagcard是指向使用上述向导创建的接口类的指针。

当我尝试注册时,我得到以下HRESULT:0x80040112 这是“没有使用许可的类别。”

这是否意味着我的程序没有制作必要的注册表项?

1 个答案:

答案 0 :(得分:1)

这可能意味着在自定义类工厂创建类的实例之前必须安装许可证。您是否尝试在完全正常工作的POS系统上运行程序并使用磁卡刷卡许可使用?也许还有一些其他许可证需要你做这类事情?

如果这是一个没有注册的课程的问题,结果将是“课程未注册”。听起来你已经通过向导完成了必要的步骤来实现接口并让它生成正确的注册表项。