关于网友提出的“ VS2010建立了MFC AxtiveX工程报错,JS调用Axtivex不成功”问题疑问,本网通过在网上对“ VS2010建立了MFC AxtiveX工程报错,JS调用Axtivex不成功”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: VS2010建立了MFC AxtiveX工程报错,JS调用Axtivex不成功描述:
本帖最后由 xue251248603 于 2014-05-15 11:08:57 编辑
visual studioactivexvs2010插件object
近期需要开发一个ActiveX控件,用VS2010建立了MFC AxtiveX工程(工程名 activeXtest.),建立后有许多错误,相继调整了一些配置:1、属性 --> 配置属性 --> C/C++ --> 代码生成 --> 运行库 改为 “多线程DLL(MD)”;
2、属性 --> 配置属性 --> 常规 --> MFC的使用 改为 “在共享 DLL 中使用 MFC”。
调整2是因为如下报错:
错误 1 error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h 24 1 activeXtest
--------------------------------背景交代完毕----------------------------------------
问题1:
但是每次打开 activeXtest.h 文件后VS会崩溃。
VS停止运行报错:
问题签名:
问题事件名称: CLR20r3
问题签名 01: devenv.exe
问题签名 02: 10.0.30319.1
问题签名 03: 4ba1fab3
问题签名 04: Microsoft.VisualStudio.Text.Data
问题签名 05: 10.0.0.0
问题签名 06: 4ba1d707
问题签名 07: 1d6
问题签名 08: 52
问题签名 09: System.ArgumentOutOfRange
OS 版本: 6.1.7601.2.1.0.256.1
区域设置 ID: 2052
----------------------------割一下-------------------------------------
问题2:
然后通过向导添加了方法:Test01() 接口,返回字符串 “test01”,代码如下:
activeXtest.idl
#include
#include
[ uuid(35AEE76F-5CD3-4404-9FAB-C561D6A7990D), version(1.0),
control ]
library activeXtestLib
{
importlib(STDOLE_TLB);
// CactiveXtestCtrl 的主调度接口
[
uuid(28E74985-74AD-4F11-91C2-72BE1ADB99A8)
]
dispinterface _DactiveXtest
{
properties:
methods:
[id(DISPID_ABOUTBOX)] void AboutBox();
[id(1)] BSTR Test01(void);
};
// CactiveXtestCtrl 的事件调度接口
[
uuid(A044456C-B9FE-4FD2-827D-2BFB6A88BF12)
]
dispinterface _DactiveXtestEvents
{
properties:
// 事件接口没有任何属性
methods:
[id(1)] BSTR Test02(void);
};
// CactiveXtestCtrl 的类信息
[
uuid(B795F2A0-E31F-461D-833A-1E88130E2939)
]
coclass activeXtest
{
[default] dispinterface _DactiveXtest;
[default, source] dispinterface _DactiveXtestEvents;
};
};
activeXtestCtrl.cpp中代码
BSTR CactiveXtestCtrl::Test01(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString strResult;
// TODO: 在此添加调度处理程序代码
strResult = L"test01";
return strResult.AllocSysString();
}
用regsvr32注册插件
然后用 ..\Program Files (x86)\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\Debug\TstCon.exe 测试Test01()接口返回值显示为: test01 (VT_BSTR),正确
可是在js中调用时报错,提示“对象不支持“Test01”属性或方法 ”,调用代码也贴出来吧。
<>
CODEBASE="H:\learn\C#Project\activeXtest\Debug\activeXtest.ocx">
var a = document.getElementById("OCX");
b = a.Test01();
主要纠结于问题2,然后想到了是不是因为问题1导致的问题2?
有看到过要用IDispatch接口,由于进入不了.h问题,不清楚 dispinterface 类型是不是他们所说得IDispatch类型。
小弟新手,还望大神详细指教
解决方案1: