csp接口实现中调用FuncReturnhWnd异常 解决方法
2009-08-15 15:33
525 查看
在csp接口实现中,可以通过PVTableProvStruc中的回调函数FuncReturnhWnd获取设置的窗口。但我在xp sp2环境下(程序为非UNICODE环境)下测试时,当调用FuncReturnhWnd函数时, 一直报堆栈溢出错误。后来在网上查了好久, 在一个邮件列表中发现相似问题的解决方案。可能是微软提供的cspdk.h 中对 CRYPT_RETURN_HWND函数定义 typedef void (*CRYPT_RETURN_HWND)(HWND *phWnd); 有问题 需要定义为 typedef void (WINAPI*CRYPT_RETURN_HWND)(HWND *phWnd);
CSP接口实现中的部分代码如下:
BOOL WINAPI
CPAcquireContext(
OUT HCRYPTPROV *phProv,
IN LPCSTR szContainer,
IN DWORD dwFlags,
IN PVTableProvStruc pVTable)
{
if (NULL != pVTable && NULL != pVTable->FuncReturnhWnd)
{
// warn 如果直接使用FuncReturnhWnd函数, 会导致栈溢出
typedef void (WINAPI *MY_CRYPT_RETURN_HWND)(HWND *phWnd);
MY_CRYPT_RETURN_HWND fnReturnhWnd = (MY_CRYPT_RETURN_HWND)pVTable->FuncReturnhWnd;
HWND hwndTemp;
fnReturnhWnd(&hwndTemp);
if (::IsWindow(hwndTemp))
{
g_hwndOwner = hwndTemp;
}
}
// todo ...
}
设置csp中界面父窗体的调用: CryptSetProvParam(NULL, PP_CLIENT_HWND, (const BYTE*)(&hwnd), 0);
CSP接口实现中的部分代码如下:
BOOL WINAPI
CPAcquireContext(
OUT HCRYPTPROV *phProv,
IN LPCSTR szContainer,
IN DWORD dwFlags,
IN PVTableProvStruc pVTable)
{
if (NULL != pVTable && NULL != pVTable->FuncReturnhWnd)
{
// warn 如果直接使用FuncReturnhWnd函数, 会导致栈溢出
typedef void (WINAPI *MY_CRYPT_RETURN_HWND)(HWND *phWnd);
MY_CRYPT_RETURN_HWND fnReturnhWnd = (MY_CRYPT_RETURN_HWND)pVTable->FuncReturnhWnd;
HWND hwndTemp;
fnReturnhWnd(&hwndTemp);
if (::IsWindow(hwndTemp))
{
g_hwndOwner = hwndTemp;
}
}
// todo ...
}
设置csp中界面父窗体的调用: CryptSetProvParam(NULL, PP_CLIENT_HWND, (const BYTE*)(&hwnd), 0);
相关文章推荐
- cxf实现的webservice,调用接口的方法后出现异常
- "调用扫描接口出现异常”解决方法
- C# 反射-通过继承接口实现创建对象并调用方法
- Struts2.5使用感叹号实现动态方法调用无效的解决办法
- WebService调用时创建应用程序事件日志时出现异常的解决方法
- python调用caffe接口进行classify时提示Mean shape incompatible with input shape错误的解决方法
- struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!
- hibernate先删除数据,紧接着执行插入时的异常解决之道——中间不能调用flush()、clear()等方法
- Asp.Net异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值"的解决方法
- MyEclipse中,当我们写一个类实现一个接口时,会自动生成重写该接口的方法,但是,方法的参数提示不够好,是什么原因导致的呢?该如何解决呢?
- Case:接口实现类的方法上使用AspectJ方式实现aop的异常问题
- 关于Spring JdbcTemplate调用queryForObject()方法结果集为空时报异常的解决办法
- 通过Feign调用的方法实现接口之间的传递
- 1)编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; 3)编写Bird类和Fish类的测试程序,并调用其中的run()方法
- Java编程之TreeSet排序两种解决方法(1)元素自身具备比较功能,元素需要实现Comparable接口覆盖compare(2)创建根据自定义Person类的name进行排序的Comparator
- 反射调用主方法异常解决
- 使用注解方式实现Dubbo搭建,解决消费者调用接口出现空指针异常以及事务等问题
- 在springmvc中非controller类中调用service接口,以获取springmvc容器方法实现
- ok6410 3.0.1内核调用V4L接口出错解决方法
- python调用caffe接口进行classify时提示Mean shape incompatible with input shape错误的解决方法