delphi的DLL调用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi的DLL调用问题相关的知识,希望对你有一定的参考价值。

正常我使用ShowModal能正常进入DLL界面。使用SHOW就打开闪退。动态模式调用DLL只能使用ShowModal吗?因为使用了ShowModal就只能用DLL,只有关闭DLL后才能使用主菜单。哪位高手能教我一下怎么调用DLL后主窗体还能操作的?

有可能和你在调用时执行FreeLibrary(hdll)有关,Show出来之后会立即调用FreeLibrary释放动态库资源,而ShowModal后对话框不关闭是不会执行FreeLibrary的。 参考技术A 改:

导入:function FunName(InData:PChar;var OutData:PChar):DWORD;stdcall;external '动态库文件名.dll';

var 相当于 C++中 &,取地址符号.追问

这种应该是属于静态加载dll了,你这种模式就是不知道怎么动态调用dll,程序默认加载好了。
想随时加载不同dll

如何在 Delphi 中调试从 Java 调用的 DLL?

【中文标题】如何在 Delphi 中调试从 Java 调用的 DLL?【英文标题】:How to debug a DLL called from Java in Delphi? 【发布时间】:2009-11-08 11:20:55 【问题描述】:

我使用 Delphi 编写了一个 DLL,它可以通过 JNA (Java Native Access) 从 Java 中调用。此 DLL 中的方法只是简单的操作,但为了将来使用和更复杂的调用,如果直接从 Java(或从 Java IDE)调用 DLL,我想知道如何使用 Delphi 调试器。

【问题讨论】:

要调试 DLL,您必须指定主机应用程序(如消息所示)。您可以通过菜单:“开始” - “参数”。 【参考方案1】:

我相信这个问题的答案与 Stack Overflow 问题的答案相同How to debug a DLL file in Delphi

事实上,既然你是在 Delphi 环境中调试 Delphi 的 DLL 文件,那么谁在调用堆栈的上层并不重要。

【讨论】:

【参考方案2】:

如果我定义主机应用程序 (Java) 并设置正确的参数,它会起作用:

主机应用程序:C:\Programme\Java\jdk1.6.0_14\jre\bin\java.exe 参数:-cp "/path/to/test.jar" junit.textui.TestRunner AppTest

此处解释了 JUnit 文本 TestRunner 命令行参数: http://junit.sourceforge.net/junit3.8.1/javadoc/junit/textui/TestRunner.html

【讨论】:

【参考方案3】:

为什么不先在 Delphi 中调试 DLL? Delphi 有一个名为DUnit 的单元测试框架。您仍然希望为整个系统编写集成测试,但您可以在 JUnit 单元测试中模拟外部依赖项。

【讨论】:

古老的谚语说“吃的就是证明布丁”——通过从 Java 调用 DLL 可以分析错误,例如错误的数据类型、指针等。 DUnit 测试当然可以用作额外的安全网。 JUnit 测试会涵盖 DLL 的集成以及 Java 端的相关操作,如果这个集成测试失败,则需要分析数据流。 @mjustin:我完全同意您需要集成测试。除此之外,我所建议的只是单独测试这些类(单元测试)。你可以吃蛋糕也可以吃! :) 如果您要模拟外部依赖项(DLL),那么它就不再是一个很好的集成测试了。通过建议调试由 Java 调用的 not DLL,您基本上回答了如何调试由 Java 调用的 DLL 的问题。 @Rob:我已经说过两次了,这是对集成测试的补充。 OP询问有关调试DLL的问题。单元测试是减少代码错误的好方法。单元测试的核心原则是单独测试类(以及扩展的 DLL)。我希望我的集成测试能够正常工作——因为我已经通过单元测试消除了任何错误。见c2.com/cgi/wiki?UnitTestIsolation

以上是关于delphi的DLL调用问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi编写dll遇到的问题

关于delphi调用C++的DLL中char*参数的问题

delphi如何调用DLL

delphi如何调用dll函数

Delphi7 dll 动态调用的问题

delphi 调用 c语言 dll