我在写COM的时候碰到这样一个问题。
regsvr32注册COM控件的时候,提示注册成功,点击确定按钮后,出现非法的地址访问错误。
考虑,可能是GUID的问题。修改该COM的GUID后,没有出现该问题,但是过了一天后,问题再次出现。然后再怎么修改GUID,还是有问题。(代码没有动过,不知道怎么回事。)
考虑,可能是代码的问题。重新生成一个COM,再一个一个的增加函数验证。发现,只要在COM类中增加了窗体创建(Form.Create)函数后,立即出现该错误。那位高手告知原理,同时提供解决方法。
PS:我在COM类中使用窗体创建函数,是因为我需要用到自动化事件。
regsvr32注册COM控件的时候,提示注册成功,点击确定按钮后,出现非法的地址访问错误。
考虑,可能是GUID的问题。修改该COM的GUID后,没有出现该问题,但是过了一天后,问题再次出现。然后再怎么修改GUID,还是有问题。(代码没有动过,不知道怎么回事。)
考虑,可能是代码的问题。重新生成一个COM,再一个一个的增加函数验证。发现,只要在COM类中增加了窗体创建(Form.Create)函数后,立即出现该错误。那位高手告知原理,同时提供解决方法。
PS:我在COM类中使用窗体创建函数,是因为我需要用到自动化事件。
主要是处理业务逻辑的,安装COM+的机器是应用服务器,其中的服务都是
不可视控件呀,不过COM+就是一个DLL,你用DLL封装From 然后再调用你用过没?
首先你在DLL中必须要先注册你用使用的Form ,你注册了COM+但是你的COM+中也
要注册你要用到的Form类呀
我的问题出在:
procedure TSurat.Initialize;
begin
inherited Initialize;
FConnectionPoints:=TConnectionPoints.Create(Self);
if AutoFactory.EventTypeInfo<>nil then
FConnectionPoint:=FConnectionPoints.CreateConnectionPoint(
AutoFactory.EventIID,ckSingle,EventConnect)
else
FConnectionPoint:=nil; begin
FrmMain:=TFrmMain.Create(Application);
FrmMain.SendSMSToRoof:=SMSToRoof;
FrmMain.NoteMark:=NoteMark;
end;
end;
中的FrmMain:=TFrmMain.Create(Application);
如何解决?
你在它那儿设置断点,就可以一步步看了.
如果仅是把COM当作编程技术,请便...就把它看作一般的DLL差不多吧,只要你能
理解它本质,能够驾驭它..那...随你怎么.
用regsvr32做为Host Application调试,系统没有进入我在exports中的DllRegisterServer前已经提示注册成功,然后出现一个地址是00000000的读取错误。
从系统层面理解,Regsvr32程序是运行在受到保护的内存区域的,应该是没有可能让第三方程序进入调试,不知道你是怎么调试的。
同时,在COM中加入Form并没有导致我的使用错误。只是注册错误而已。其中道理何在?
你自己在一个EXE中,LoadLibrary ,然后调用DllRegisterServer另外,你在调试的时候,先把这个DLL注销一下.