vc调用vb编写的带窗体的dll时,无法弹出窗体,并报错,怎么办???

X5queen721 2008-03-25 07:07:15
我用vb编写了一个带窗体(form里还带有treeview控件)的dll,然后用vc调用该dll,运行到要跳窗体的时候,就会出现
unhandled exception in test.exe(KERNEL32.DLL) oxE06D7363:Microsoft C++ Exception.的错误提示。
请各位高手告诉一下这个问题该怎么解决啊???如果没有办法解决的话,有没有什么好的替换方案,请说具体点(本人新手),谢谢啦~~~。
...全文
103 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
X5queen721 2008-03-26
  • 打赏
  • 举报
回复
去网上查了下,好像说VC中要弹出VB的Form好像挺难的。

这个问题已经用替代方案解决了:即使用OCX来编写控件,然后在VC中建一窗口嵌入,这样终于可以成功解决问题了。

结贴!
嗷嗷叫的老马 2008-03-26
  • 打赏
  • 举报
回复
顶顶...扫楼.....睡觉...
X5queen721 2008-03-25
  • 打赏
  • 举报
回复
1.我VC不是太熟,不知道是不是com方法调的。VC里用到了import,导入dll文件。
2.有传递,VC向VB的dll里面传递了一个地址,然后vb通过地址取值,这个部分我已经试验成功了。并且vb里面通过值查找,并利用treeview控件显示出来也是成功的。
我自己试了下,用VB调用那个dll是可以弹出来带treeview的form的,整个过程都是OK的。
用VC调用不带Form的dll也是OK的。
主要问题是:但改成VC调用带Form的DLL时,一运行到弹出form那步,就出错!由于主程序是VC写的,所以调用方肯定是不能改了,请问有没有什么办法解决下,谢谢了~~~
supergreenbean 2008-03-25
  • 打赏
  • 举报
回复
你是通过COM方法调用的么,有没有传递些什么东西
X5queen721 2008-03-25
  • 打赏
  • 举报
回复
我在vc中也发布了相同的帖子,如果有高手能解决,我统统都给分~~~谢谢啦~~~~
可用来在VBVC中驱动摄像头,进行静帧捕捉的DLL动态链接库(必须要有摄像头生成StillCap0000.bmp):将MyDll文件解压后把MyDll.dll与MyDll.lib一起拷入工程DEBUG目录中(为保险起见DEBUG的外层目录也拷贝一份吧),另有一个VC++6的测试工程test_Dll,已经考入相应DLL和LIB文件,可直接编译运行,VB只拷贝MyDll.dll与MyDll.lib VB2008 调用方法,在公共模块中声名: Public Declare Function CreateWnd Lib "MyDll" () As Double Public Declare Function ClearGraphs Lib "MyDll" () As Double Public Declare Function OnpStillCapture Lib "MyDll" (ByVal hwnd As Long) As Double Public Declare Function InitStillGraph Lib "MyDll" (ByVal hwnd As Long) As Double Public Declare Function CloseWnd Lib "MyDll" () As Double 在窗体上放置2个PictureBox控件,名字为:pic1,pic2 放置三个按键:名字为Btn1,Btn2,Btn3 Btn1为打开视频,调用代码: Private Sub Btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn1.Click InitStillGraph(pic1.Handle) '打开摄像头预览视频 end sub Btn2为截取视频保存为BMP,文件保存在应用程序路径下,调用代码: Private Sub Btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn2.Click OnpStillCapture(pic2.Handle) '截取预览视频一帧图像 end sub Btn3为截取视频保存为清除内存,调用代码: Private Sub Btn3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn3.Click ClearGraphs() '退出前,完成内存清扫工 end sub VC调用方法: 在对话框上放置两个图像框,类型为位图,三个按键B1,B2,B3 定义全局函数引用: typedef HWND(* CreateWnd)(void);// typedef HRESULT(* InitStillGraph)(HWND hwnd); typedef void (* OnpStillCapture)(HWND hwnd); typedef int (* ClearGraphs)(); HINSTANCE glibsample; //如果定义成HANDLE类型,则出错 CreateWnd createwnd; InitStillGraph initStillGraph;//定义引用函数 OnpStillCapture onpStillCapture;//定义引用函数 ClearGraphs clearGraphs;//定义引用函数 用类向导为两个位图框建立控件(类型为Contorl)变量,m_p1,m_2 : 在窗口OnInitDialog()函数中调整图像框大小: // TODO: Add your specialized code here and/or call the base class m_p1.MoveWindow(0,0,200,200,true); m_p2.MoveWindow(210,0,200,200,true); glibsample=LoadLibrary("MyDll.dll"); //加载dll 在B1消息函数中: void 你的类::OnB1() { initStillGraph=(InitStillGraph)GetProcAddress(glibsample,"InitStillGraph"); (*initStillGraph)(m_p1.m_hWnd);//预览图像 } 在B2消息函数中: void 你的类::O

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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