VC控件调用C#编写的ACTIVEX控件失败,求教是怎么回事?

ljndhr 2016-12-26 01:29:37
在DIALOG类中加入了LoadActiveX方法
void CViewcharDlg::LoadActiveX(LPCTSTR strActiveXName, REFIID riidOfActiveX, int x, int y, int nWidth, int nHeight)
{
//Initialize ATL control containment code.
BOOL(WINAPI *m_AtlAxWinInit)();
m_AtlAxWinInit = (BOOL(WINAPI *)(void))::GetProcAddress
(_hWebLib, "AtlAxWinInit");
m_AtlAxWinInit();

// Get the dimensions of the main window's client
// area, and enumerate the child windows. Pass the
// dimensions to the child windows during enumeration.
RECT rcClient;
_hSelf = this->m_hWnd;
//GetClientRect(_hSelf, &rcClient);

_hAtl = ::CreateWindowEx(
WS_EX_CLIENTEDGE, \
TEXT("AtlAxWin"), \
strActiveXName, \
WS_CHILD | WS_VISIBLE | WS_EX_RTLREADING,\
x, y, nWidth, nHeight,\
this->m_hWnd, \
NULL, \
NULL, \
NULL);

if (!_hAtl)
{
::MessageBox(NULL, TEXT("Can not load AtlAxWin!"),
TEXT(""), MB_OK | MB_ICONSTOP);
throw int(106901);
}

HRESULT(WINAPI *m_AtlAxGetControl) (HWND h, IUnknown** pp);
m_AtlAxGetControl = (HRESULT(WINAPI *)
(HWND, IUnknown**))::GetProcAddress(_hWebLib, "AtlAxGetControl");

m_AtlAxGetControl(_hAtl, &_pUnk);

_pUnk->QueryInterface(__uuidof(Demo::IObjectSafetyPtr),
(LPVOID *)&_pDotNetCOMPtr);

if (_pDotNetCOMPtr != NULL)
{
//_pDotNetCOMPtr->SetInterfaceSafetyOptions((long)_hSelf);
}
else
{
// Get the dimensions of the main window's client
// area, and enumerate the child windows. Pass the
// dimensions to the child windows during enumeration.
//RECT rcClient;
// GetClientRect(_hSelf, &rcClient);

::DestroyWindow(_hAtl);
_hAtl = ::CreateWindowEx(
WS_EX_CLIENTEDGE, \
TEXT("AtlAxWin"), \
TEXT("MSHTML:""Please register ActiveX control before using this plugin."""),
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN |
WS_EX_RTLREADING, \
0, 0, nWidth, nHeight, \
this->m_hWnd, \
NULL, \
NULL, \
NULL);
}
}
然后在在要使用ActiveX的Dialog的OnInitDialog()中加入下面的代码。
LoadActiveX(TEXT("Demo.IObjectSafety"), __uuidof(Demo::IObjectSafety), 0, 0, 750, 500);

但是程序运行后VC控件窗口中出现了ACTIVEX控件窗口但是里面显示 已取消到网页的导航,确保 Web 地址 http://demo.iobjectsafety 正确。

请各位大神看下这是怎么回事?
...全文
442 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-03
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
ljndhr 2017-01-03
  • 打赏
  • 举报
回复
请问控件自己有做检查是什么意思? 控件的用途大概是显示一张色块图 我把接口加在了控件程序入口那里 正确的是不是应该加在控件中图片显示那里?
Yofoo 2016-12-28
  • 打赏
  • 举报
回复
控件窗口中出现了ACTIVEX控件窗口但是里面显示 已取消到网页的导航,确保 Web 地址 http://demo.iobjectsafety 正确 如果已经显示了, 说明创建正常了, 有这个提示应该是控件自己有做检查, 你应该弄清楚这个控件要怎么用, 要什么条件, 提供这个控件的人才知道
ljndhr 2016-12-26
  • 打赏
  • 举报
回复
有没有大神赐教啊 实在是不知道问题出在哪里了
赵4老师 2016-12-26
  • 打赏
  • 举报
回复
百度搜“VC控件调用C#编写的ACTIVEX控件”
ljndhr 2016-12-26
  • 打赏
  • 举报
回复
请问能说得详细些吗? 具体要加到哪里?
zgl7903 2016-12-26
  • 打赏
  • 举报
回复

3,248

社区成员

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

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