用vs2008 c++ 调用ocx控件问题
现在手头有一个ocx控件,要调用其中的方法,写了如下代码:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <strsafe.h>
#include <dbt.h>
/*#import "c:/windows/system32/cryptocx.ocx" \
no_namespace no_smart_pointers raw_interfaces_only \
raw_native_types no_implementation named_guids*/
#import "c:/windows/system32/cryptocx.ocx" \
named_guids
//这个地方只加了一个named_guids的参数,因为如果写no_namespace会报“使用未声明标识符”的错误,加其他参数也会有其他不同问题
using namespace CRYPTOCXLib;
void main()
{
try{
CoInitialize(NULL) ;
{
if(1)
{
_DCryptOcx* pCrypt = 0 ;
HRESULT hr = CoCreateInstance(
CLSID_CryptOcx,//Com对象标识符
0,//指向接口IUnknown指针
CLSCTX_ALL,//运行可执行代码上下文
DIID__DCryptOcx,//Com对象接口标识符
reinterpret_cast<void**>(&pCrypt)//用来接收指向Com对象接口地址指针变量
);
assert( SUCCEEDED(hr) ) ;
if(pCrypt){
pCrypt->OpenDevice(L"111111");
pCrypt->Release();
}
}
}
CoUninitialize() ;
}
catch(_com_error *e)
{
MessageBoxA(NULL,e->ErrorMessage(),NULL,NULL);
}
}
这样子写直接debug,编译通过,程序执行之后,会弹出一个visual studio的messagebox,报错USBTest.exe 中的 0x7c812afb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012fcd8 处的 _com_error。加断点逐步调试,是执行到pCrypt->OpenDevice(L"111111");这一句,这个方法再去调用其它的方法时,会报“CXX0030: 错误: 无法计算表达式的值”,因为ocx不是我写的,只是拿过来用,对方给的javascript的例子,就在网页载入了这个ocx,然后就直接可以调用opendevice方法,所以我也不知道现在是什么原因报错,请问我上面代码写的有问题么?本人c++菜鸟一个,请达人指教,谢谢