VS2010建立了MFC AxtiveX工程报错,JS调用Axtivex不成功

xue251248603 xue251248603 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
近期需要开发一个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 <olectl.h>
#include <idispids.h>

[ 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”属性或方法 ”,调用代码也贴出来吧。
<OBJECT ID="OCX" WIDTH=528 HEIGHT=545 classid="B795F2A0-E31F-461D-833A-1E88130E2939"
CODEBASE="H:\learn\C#Project\activeXtest\Debug\activeXtest.ocx">

var a = document.getElementById("OCX");
b = a.Test01();

主要纠结于问题2,然后想到了是不是因为问题1导致的问题2?
有看到过要用IDispatch接口,由于进入不了.h问题,不清楚 dispinterface 类型是不是他们所说得IDispatch类型。

小弟新手,还望大神详细指教
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
xue251248603
ATL 3,248 成员 48,530 内容