C++ 微软指纹SDK C++;winbio.lib不工作
我目前正在进行指纹验证项目,我已经正确配置了所有驱动程序。我使用的是微软指纹阅读器,当我在登录时用软件DigitalPersona测试它时,它就可以工作了。我目前使用的是windows sdk 7.0A,我使用的是Microsoft Visual Studio 2010 我为此代码创建了一个“空项目”,并将其他库依赖项链接到windows sdk,并在“输入”下键入winbio.lib以获取其他依赖项。我犯了这个错误 错误C2065:“CaptureSampleCallback”:未声明的标识符 下面是代码,我完全遵循了微软的示例,但它无法工作=(C++ 微软指纹SDK C++;winbio.lib不工作,c++,visual-studio-2010,winapi,fingerprint,C++,Visual Studio 2010,Winapi,Fingerprint,我目前正在进行指纹验证项目,我已经正确配置了所有驱动程序。我使用的是微软指纹阅读器,当我在登录时用软件DigitalPersona测试它时,它就可以工作了。我目前使用的是windows sdk 7.0A,我使用的是Microsoft Visual Studio 2010 我为此代码创建了一个“空项目”,并将其他库依赖项链接到windows sdk,并在“输入”下键入winbio.lib以获取其他依赖项。我犯了这个错误 错误C2065:“CaptureSampleCallback”:未声明的标识符
#包括
#包括
#包括
#包括
HRESULT CaptureSampleWithCallback(布尔b取消)
{
HRESULT hr=S_正常;
WINBIO_SESSION_HANDLE sessionHandle=NULL;
//连接到系统池。
hr=WinBioOpenSession(
WINBIO_类型_指纹,//服务提供商
WINBIO\u池\u系统,//池类型
WINBIO_标志_原始,//原始访问
NULL,//生物识别单元ID数组
0,//生物识别单元ID的计数
WINBIO_DB_DEFAULT,//默认数据库
&sessionHandle//[out]会话句柄
);
如果(失败(小时))
{
wprintf_s(L“\n WinBioOpenSession失败。hr=0x%x\n”,hr);
转到e_出口;
}
//异步捕获生物特征样本。
wprintf_s(L“\n调用WinBioCaptureSampleWithCallback”);
hr=WinBioCaptureSampleWithCallback(
sessionHandle,//打开会话句柄
WINBIO\u无\u用途\u可用,//样本的预期用途
WINBIO\u数据\u标志\u原始,//样本格式
CaptureSampleCallback,//回调函数
空//可选上下文
);
如果(失败(小时))
{
wprintf_s(L“\n WinBioCaptureSampleWithCallback失败”);
wprintf_s(L“hr=0x%x\n”,hr);
转到e_出口;
}
wprintf_s(L“\n滑动传感器…\n”);
//如果设置了bCancel标志,则取消捕获过程。
如果(b取消)
{
wprintf_s(L“\n启动取消计时器…”);
睡眠(7000);
wprintf_s(L“\n调用WinBioCancel\n”);
hr=WinBioCancel(会话句柄);
如果(失败(小时))
{
wprintf_s(L“\n WinBioCancel失败。hr=0x%x\n”,hr);
转到e_出口;
}
}
//等待异步捕获过程完成
//或者被取消。
hr=WinBioWait(会话句柄);
如果(失败(小时))
{
wprintf_s(L“\n WinBioWait失败。hr=0x%x\n”,hr);
}
紧急出口:
if(sessionHandle!=NULL)
{
WinBioCloseSession(会话句柄);
sessionHandle=NULL;
}
wprintf_s(L“\n按任意键退出…”);
_getch();
返回人力资源;
}
//------------------------------------------------------------------------
//以下函数是WinBioCaptureSampleWithCallback的回调函数。
//该功能过滤来自生物识别子系统的响应,并
//将结果写入控制台窗口。
//
无效回调CaptureSampleCallback(
__在_optPVOID CaptureCallbackContext中,
__在HRESULT操作状态中,
__在WINBIO\u UNIT\u ID UnitId中,
__在计算(样本化)PWINBIO BIR样本中,
__在尺寸和样本方面,
__在WINBIO_拒绝_详情拒绝详情中
)
{
未引用的_参数(CaptureCallbackContext);
wprintf_s(L“\n CaptureSampleCallback正在执行”);
wprintf_s(L“\n刷卡已处理-单元ID:%d”,单元ID);
如果(失败(操作状态))
{
如果(操作状态==WINBIO\u E\u坏的\u捕获)
{
wprintf_s(L“\n错误捕获;原因:%d\n”,拒绝详细信息);
}
其他的
{
wprintf_s(L“\n WinBioCaptureSampleWithCallback失败”);
wprintf_s(L“OperationStatus=0x%x\n”,OperationStatus);
}
转到e_出口;
}
wprintf_s(L“\n捕获了%d个字节。\n”,采样);
紧急出口:
if(示例!=NULL)
{
生物树(样品);
样本=NULL;
}
}
您有两种解决方案:
A.调用CaptureSampleCallback
B.将函数的定义移动到
CaptureSampleCallback
之前CaptureSampleWithCallback
尝试将CaptureSampleCallback
声明放在CaptureSampleWithCallback
之前!非常感谢!这解决了我的问题。不过我还得问一个noob问题。似乎无法解决它=(“1>链接:致命错误LNK1561:必须定义入口点”我应该将“子系统”更改为指向CaptureSampleWithCallBack right??但它似乎无法工作。我不知道要填写什么。当我选择“windows”选项时,它也无法工作。知道如何解决此问题吗?谢谢您的帮助!=我想知道您是否定义了main()(或等效)函数。不,我没有。很抱歉,我刚刚开始尝试捕获样本的此函数。我需要一个主函数来执行此操作吗?我在这里指的是microsoft的示例代码,我完全遵循了此代码。CaptureSample()等效的主函数是否已经正确?我认为另一个问题帖子是合适的,因为代码不同。我将发布另一个问题帖子,希望您能指导我=D谢谢
#include <Windows.h>
#include <Conio.h>
#include <Stdio.h>
#include <WinBio.h>
HRESULT CaptureSampleWithCallback(BOOL bCancel)
{
HRESULT hr = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_RAW, // Raw access
NULL, // Array of biometric unit IDs
0, // Count of biometric unit IDs
WINBIO_DB_DEFAULT, // Default database
&sessionHandle // [out] Session handle
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioOpenSession failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Capture a biometric sample asynchronously.
wprintf_s(L"\n Calling WinBioCaptureSampleWithCallback ");
hr = WinBioCaptureSampleWithCallback(
sessionHandle, // Open session handle
WINBIO_NO_PURPOSE_AVAILABLE, // Intended use of the sample
WINBIO_DATA_FLAG_RAW, // Sample format
CaptureSampleCallback, // Callback function
NULL // Optional context
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. ");
wprintf_s(L"hr = 0x%x\n", hr);
goto e_Exit;
}
wprintf_s(L"\n Swipe the sensor ...\n");
// Cancel the capture process if the bCancel flag is set.
if (bCancel)
{
wprintf_s(L"\n Starting CANCEL timer...");
Sleep( 7000 );
wprintf_s(L"\n Calling WinBioCancel\n");
hr = WinBioCancel( sessionHandle );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioCancel failed. hr = 0x%x\n", hr);
goto e_Exit;
}
}
// Wait for the asynchronous capture process to complete
// or be canceled.
hr = WinBioWait( sessionHandle );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioWait failed. hr = 0x%x\n", hr);
}
e_Exit:
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
//------------------------------------------------------------------------
// The following function is the callback for WinBioCaptureSampleWithCallback.
// The function filters the response from the biometric subsystem and
// writes a result to the console window.
//
VOID CALLBACK CaptureSampleCallback(
__in_opt PVOID CaptureCallbackContext,
__in HRESULT OperationStatus,
__in WINBIO_UNIT_ID UnitId,
__in_bcount(SampleSize) PWINBIO_BIR Sample,
__in SIZE_T SampleSize,
__in WINBIO_REJECT_DETAIL RejectDetail
)
{
UNREFERENCED_PARAMETER(CaptureCallbackContext);
wprintf_s(L"\n CaptureSampleCallback executing");
wprintf_s(L"\n Swipe processed - Unit ID: %d", UnitId);
if (FAILED(OperationStatus))
{
if (OperationStatus == WINBIO_E_BAD_CAPTURE)
{
wprintf_s(L"\n Bad capture; reason: %d\n", RejectDetail);
}
else
{
wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. ");
wprintf_s(L" OperationStatus = 0x%x\n", OperationStatus);
}
goto e_Exit;
}
wprintf_s(L"\n Captured %d bytes.\n", SampleSize);
e_Exit:
if (Sample != NULL)
{
WinBioFree(Sample);
Sample = NULL;
}
}
VOID CALLBACK CaptureSampleCallback(
__in_opt PVOID CaptureCallbackContext,
__in HRESULT OperationStatus,
__in WINBIO_UNIT_ID UnitId,
__in_bcount(SampleSize) PWINBIO_BIR Sample,
__in SIZE_T SampleSize,
__in WINBIO_REJECT_DETAIL RejectDetail
);