VC9调用ActiveX.Dll的问题........

silencenet 2010-05-06 08:45:06
ActiveX.dll是VB6写的..

VS中添加的方法是:
解决方案资源管理器->添加->类->MFC类->ActiveX控件中的MFC类
添加包含了Activex中的CRMLogin类
自动生成相应的C++类(CCRMLogin.h/cpp)

在另一个CPP中添加包含文件CCRMLogin.h

可在使用时为啥不成呢...(编译能通过)
CCRMLogin crm;
crm.Login(); //Login方法是CCRMLogin中的Public方法,VS也有提示这个方法名,那这没错呀...

我在Debug模式中执行这代码时,出现错误,没有具体错误说明..
在Release模式下不出错,但没任何反应,跟进去看,到了下面这个函数中


void AFX_CDECL CWnd::InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
void* pvRet, const BYTE* pbParamInfo, ...)
{
ASSERT(m_pCtrlSite != NULL); // not an OLE control (not yet, at least)

if (m_pCtrlSite == NULL) //这里成立,直接返回了.. :(
return;

va_list argList;
va_start(argList, pbParamInfo);
m_pCtrlSite->InvokeHelperV(dwDispID, wFlags, vtRet, pvRet, pbParamInfo,
argList);
va_end(argList);
}


前面使用另一种方法
#import "dll路径"
用这种方法后
编译时提示CCRMLogin crm; 抽象类不能实例化...
郁闷了啊... 整了一下午了,GG无数...都说用#import..
结果还是没一个能成的.. :( 帮忙看看...
...全文
350 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
quan_zhh 2012-04-25
  • 打赏
  • 举报
回复
楼主的问题解决了吗?我也遇到相同的问题了
silencenet 2010-05-10
  • 打赏
  • 举报
回复
SOS
silencenet 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jameshooo 的回复:]
还有,ActiveX控件不能作为一个独立窗口创建,应该在一个容器窗口中创建。
[/Quote]

什么是容器窗口啊...
我这个ActiveX没有界面的,我不知道VC++里面是怎么说的,VB写的时候里面是没有UserControl的,只有类模块
silencenet 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jameshooo 的回复:]
在InitInstance的开始有没有调用 AfxEnableControlContainer ?
[/Quote]

有啊... 我是创建的MFC工程,勾选了Activex支持...里面有自动添加这个的.
silencenet 2010-05-08
  • 打赏
  • 举报
回复
是不是哪里还少添加设置啥了 .....
silencenet 2010-05-08
  • 打赏
  • 举报
回复
为啥还是不成呢.... 重新整了个测试..
添加方式变了..:解决方案资源管理器->添加->类->MFC类->Typelib类型库中的MFC类
,
ActiveX.Dll也另外整了一个来测试
下面是VB的类源码:

Option Explicit

'//工程名:SNActiveX
'//类模块:ClsTEST

Dim m_Data As String

Public Sub SetString(strData As String)
m_Data = strData
End Sub
Public Sub Msg()
MsgBox "OK"
End Sub
Public Function GetString() As String
GetString = m_Data
End Function

.
.
.
.
下面是那个向导自动生成的"SNClsCRM.h"头文件

// 从类型库向导中用“添加类”创建的计算机生成的 IDispatch 包装类

#import "E:\\2010项目\\CRM Personal Edition\\CRMClient\\CRM.dll" no_namespace
// SNClsCRM 包装类

class SNClsCRM : public COleDispatchDriver
{
public:
SNClsCRM(){} // 调用 COleDispatchDriver 默认构造函数
SNClsCRM(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
SNClsCRM(const SNClsCRM& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}

// 属性
public:

// 操作
public:

// _ClsCRM 方法
public:
BOOL Login(BSTR * strData)
{
BOOL result;
static BYTE parms[] = VTS_PBSTR ;
InvokeHelper(0x60030001, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, strData);
return result;
}
CString GetData()
{
CString result;
InvokeHelper(0x60030002, DISPATCH_METHOD, VT_BSTR, (void*)&result, NULL);
return result;
}
CString get_RemoteHost()
{
CString result;
InvokeHelper(0x68030000, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
void put_RemoteHost(LPCTSTR newValue)
{
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0x68030000, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}

// _ClsCRM 属性
public:

};


//下面在对话框中调用的代码

#include "CClsTEST.h"
...
...
void CtestActivexDlg::OnBnClickedOk()
{
CClsTEST CT;
CT.Msg(); //这里还是一样... :( 没反应...
}
...
...

//在APP对象中
BOOL CtestActivexApp::InitInstance()
{
...
AfxEnableControlContainer();
CWinApp::InitInstance();
.....
.....
}



tanhaiyong 2010-05-08
  • 打赏
  • 举报
回复
被彻底打败了...最多只能回复三次.... 换个号夹一层...
silencenet 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
CCRMLogin类你测试过了吗?有没有问题呢?
[/Quote]
[Quote=引用 1 楼 aa3000 的回复:]
估计是 CRMLogin 本来就有问题
[/Quote]
这个Dll中的CRMLogin这个类的,我在VB程序中一直用他呀... 没问题的..
...
我都找不着方法了,现在只能在这等大家帮忙解决了. :(
jameshooo 2010-05-07
  • 打赏
  • 举报
回复
还有,ActiveX控件不能作为一个独立窗口创建,应该在一个容器窗口中创建。
jameshooo 2010-05-07
  • 打赏
  • 举报
回复
在InitInstance的开始有没有调用 AfxEnableControlContainer ?
gw_net 2010-05-07
  • 打赏
  • 举报
回复
还是要调出debug的具体错误是什么?
你可以把代码发给我,我帮你调试一下
gw_net@163.com
liumenghappy 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aa3000 的回复:]

估计是 CRMLogin 本来就有问题
[/Quote]
Eleven 2010-05-07
  • 打赏
  • 举报
回复
CCRMLogin类你测试过了吗?有没有问题呢?
aa3000 2010-05-07
  • 打赏
  • 举报
回复
估计是 CRMLogin 本来就有问题

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧