我现在有一个DELPHI做的EXE程序,有源代码。
为了将它转变为DLL,我新建了一个DLL,将EXE中的pas及res都加入到了这个DLL中,编译后这个DLL可以顺利调用,但是涉及到跨窗体调用时会出现access violation at address之类的错误,点击确定程序还是可以运行正常。
是这样的意思:
EXE程序中原本有两个窗体Form1和Form2,Form1中有这样的语句:Form2.a := ......
这句代码在exe程序中运行完全正常,但是到dll中总会报错,我试过如下的解决方案:
if not assigned(Form2) then
Form2 := TForm2.Create;
Form2.a := ......这样之后就运行正常了,但是原来的Form1中还有这样的变量,
property ItemIndex: integer read FItemIndex write SetItemIndex;程序中有涉及到调用这个ItemIndex时就会报错,请问这种情况要怎么处理?本人表达能力不好,说了这么多不知道大家听懂我的问题没,如果有什么不明白的,请大家回复。在此先谢了!

解决方案 »

  1.   

    因为初始时Form2并没有被创建,所以访问时就会出错,
    if not assigned(Form2) then
    Form2 := TForm2.Create;
    上面代码可以运行,就是因为判断form2不存在,然后创建了实例,才可以后续访问
      

  2.   


    那这个property ItemIndex: integer read FItemIndex write SetItemIndex;应该怎么处理呢?
      

  3.   

    Form2是否创建又释放了,如果释放了,在后面加一句:Form2 := nil
      

  4.   

    把ItemIndex改为别的名字,如MIndex试一下
      

  5.   


    不好意思哈,可能是我表达得不好,Form的问题已经解决了,是Property的初始化问题