C#调用C++ Builder写的OCX

viki117 2011-09-26 04:12:57
对方使用了Borland C++ Builder写了一个ocx控件,在MFC,vb,delphi下都可以正常引用控件,但是在C#下面则出现错误,以前没有引用过C++ Builder的东西,不知道到底是什么问题;

添加ocx控件倒是没有什么问题,但是在拖拉空间到界面上,或者动态创建空间的时候度出现错误:

pClientSite == 0 || m_spClientSite == 0 @ c:\program file\broland\cbuilder6\include\alt\atlctl.h/906
Press [Y]es to terminate,[N]o to continue and [C]ancel to Debug

Yes后则报外部控件异常,错误信息没什么用
************* 异常文本 **************
System.Runtime.InteropServices.SEHException: 外部组件发生异常。
在 System.Windows.Forms.UnsafeNativeMethods.IOleObject.SetClientSite(IOleClientSite pClientSite)
在 System.Windows.Forms.AxHost.SlowActivate()
在 System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
在 System.Windows.Forms.AxHost.CreateHandle()
在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
在 System.Windows.Forms.Control.CreateControl()
在 System.Windows.Forms.Control.WmShowWindow(Message& m)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
在 System.Windows.Forms.ContainerControl.WndProc(Message& m)
在 System.Windows.Forms.Form.WmShowWindow(Message& m)
在 System.Windows.Forms.Form.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

不知道要如何处理才能正常引用控件。。。。。。。
...全文
232 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yx_guo 2014-03-10
  • 打赏
  • 举报
回复
楼主,问一下怎么搞定的,我也有同样的问题
爱上未来你 2013-09-05
  • 打赏
  • 举报
回复
楼主,问一下怎么搞定的啊
linxi_96 2012-03-01
  • 打赏
  • 举报
回复
viki117您好
怎么搞定的? 我也遇到相同问题了~~
viki117 2011-09-27
  • 打赏
  • 举报
回复
搞定了,和bcb6的版本和atl选项由关,可以正常在C#里面使用控件了~~
viki117 2011-09-27
  • 打赏
  • 举报
回复
昨天搞了新系统,装了bcb10.166版本,把atl选项乱搞一通,突然可以用了,今天换台电脑,一样设置又不行,头大,不知道问题到底在哪里~~

具体来说,是:\program file\broland\cbuilder6\include\alt\atlctl.h这个头文件的906行过不去,


inline HRESULT CComControlBase::IOleObject_SetClientSite(IOleClientSite *pClientSite)
{
ATLASSERT(pClientSite == NULL || m_spClientSite == NULL);//906行
m_spClientSite = pClientSite;
m_spAmbientDispatch.Release();
if (m_spClientSite != NULL)
{
m_spClientSite->QueryInterface(IID_IDispatch,
(void**) &m_spAmbientDispatch.p);
}
return S_OK;
}
sdl2005lyx 2011-09-27
  • 打赏
  • 举报
回复
楼主,不是不帮你顶,这种问题,估计大家不好着手啊。。。。
viki117 2011-09-27
  • 打赏
  • 举报
回复
早上顶上去,麻烦下面的同学帮顶下,要不就连回3次,不能顶了
sdl2005lyx 2011-09-27
  • 打赏
  • 举报
回复
搞定就好,这种问题,别人很难帮上手。。。。
viki117 2011-09-26
  • 打赏
  • 举报
回复
你们能不能用BCB6作一个可以用的ocx,把项目发给我,viki117@21cn.com,找不到问题在那里阿
viki117 2011-09-26
  • 打赏
  • 举报
回复
我有在同一台电脑上用delphi测试过了,delphi是可以正常引用的,但是vs2008和vs2005都无法正常引用,vs2010都用上了
llsus 2011-09-26
  • 打赏
  • 举报
回复
这个提示是控件本身程序出错了,你可以用C++Buder的源程序调试一下。而且我觉得用其他语言调用,一样会出这个错误。你是在同一台电脑上试验的吗?
viki117 2011-09-26
  • 打赏
  • 举报
回复
单独那个ocx倒是可以发给你测试下,可是还有其他很多库的支持。。
sdl2005lyx 2011-09-26
  • 打赏
  • 举报
回复
如果没什么机密,楼主,你发给我试试:
sdl2002lyx@163.com

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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