描述:
我在用VC(MFC dll)创建我的com组件
在这个COM组件里又建了一个隐藏的窗体却怎么也不能成功(以前我在delphi中可以成功)
下面是我创建的过程:
WNDCLASS wndclass;
wndclass.style = NULL;
wndclass.lpfnWndProc = MyWndProc;//这个是我定义的窗体回调函数,其他参数都没有用
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = NULL;
wndclass.hIcon = NULL;
wndclass.hCursor = NULL;
wndclass.hbrBackground = NULL;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = "MyTestWindowinCOM";
if (!RegisterClass(&wndclass)) return 0;
hMyWnd = CreateWindow("MyTestWindowinCOM","", 0,0,0, 0,0,NULL, NULL, NULL,NULL) ;
if ( hMyWnd == NULL )
ErrorExit("Create Window"); //get last error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
创建失败后GetLassError竟然说“操作成功返回”!
那位大虾帮我分析一下,谢谢!
解决方案1:
woshialber (吴斐) ,你好:
想必你对vc调用com+组件有一定了解.我想请教你一个问题.它捆饶我已经很久了.
我在vc 的一个程序中要调用delphi写的com+(是dll文件),曾经试过几种方法,但都未能成功.调用之前,我已经在"控制面板"的"组件服务"中注册.我曾试过以下方法调用该com+.
方法一:classwizard"->"add class"->"from a type library"选择该dll文件,然后在程序中调用createdispatch函数创建com+对象可以成功,再调用接口函数时.若用单步执行F11进入系统函数m_ldispatch->invoke()时会出现实时调度,报告一些dllhost的问题.线程已经终止等问题.
若用cocreateinstance函数创建com+对象可以成功,但是再调用接口函数时弹出"access violation 0xc0000005"的错误.
方法二:用import "....dll" no_namespace导入dll文件,但编译不能通过,原因是接口继承于IAppServer类,它是delphi中的,vc不能识别.
您针对上面我所说的情况,能给我提供点意见吗?这个问题已经捆饶我很多天了,急需解决.拜托了!thanks!
我刚刚接触com+所以对它还不怎么了解,希望你多多指教.不胜感激!!!!!!!!!!!1
怀疑线程Message处理与COM的之间冲突。可能是创建时机的问题。
解决方案3: 你把这段代码放到一个sdk的普通程序里面试试呢
放到
winmain里面看看,看能不能返回一个有效的句柄