调试DLL时在选择Run菜单下的Parameters在出现在对话框中设置Host Application,按ok,不要按load,然后就可以像调试其它项目一样来调试dll了。可以随意设置断点,添加watch list等。要在Dll与exe间共享地址空间,可以从exe传指针参数给dll,指针可以指向任何东西,只要两端数据结构一样就可以了,当然要将指针大小一样传过去[email protected]

解决方案 »

  1.   

    谢谢帅哥的回答。不过我还有一些东西不清楚。但是Object Pascal中的对象的概念实际上不就应该是指针吗?
    另外,你所指的指针大小是什么呢?Win32下的指针不都是32位的吗?
      

  2.   

    我指的大小是指针指向的数据的大小,Dll接到指针后怎么还原里面的数据呢?
    看看AllocMem、StrAlloc、move、copy等指针相关的函数
      

  3.   

    关于调试Dll还是有问题。我按照这样的设定了以后,还是无法在断点处停下,而且Dll出了Delphi异常也不会主动中断它,而是直接在Host程序中报错……555555~~~~~~~~~~~
      

  4.   

       可以向Dll传递对象,
      

  5.   

       应该可以向Dll传递对象,
      

  6.   

    1、调试:dll工程文件的compiler options中设置所有debug属性,然后build, 设置好端点;在dll工程的Run-->parameters中Host Application处填写调用者,最好把它copy到工程文件的目录中,以免它错误的调用其他地方同名dll,根据你的需要设置parameters,然后Load,如果该Host文件不包含调试信息,则会出来CPU窗口,没关系,继续按F9(RUN),执行调用该DLL的功能部分,如果有端点,则会停在端点处2、由于你传递了使用string类型的对象(指针),可能必须在你的工程文件入口unit中Uses Sharemem;并且sharemem放在units的第一个,否则程序会出错,这是我的理解,没有验证,不知是否如此
      

  7.   

    谢谢大家,我原来的调用错误的原因已经找到了,Dll的调试模式也已经解决。
    传递指针的办法挺好。只是不知道为什么不能直接传对象……不管怎么说,分数奉上:)
      

  8.   

    补充一下,免得误导察看此文章的人。
    因为不需要建立对象的副本,传递指针的时候并不需要指出大小等信息,也不需要Move,Copy等函数的辅助。只是在Dll中直接将指针指向的值付给对象变量就行了。
    例如:Obj:=PObj^;//轻松搞定