1

我需要为从“.dll”文件调用方法的客户端编写一个应用程序。“.dll”文件以前是从“.exe” GUI 手动执行的,但现在他们想要自动化该过程。

我从来没有使用过 .dll 文件,所以到目前为止我发现的所有内容都是一整天研究的结果,我还收到了一个关于这个工具的小文档:

该接口是一个 ActiveX DLL,它提供了两个函数(GetUnitInfo 和 SaveResult)。

目前我只想使用 RUNDLL32.exe 从 Winwdows 命令行运行“GetUnitInfo”方法。

这是“GetUnitInfo”方法的文档: GetUnitInfo 的接口如下:

Public Function GetUnitInfo( _
ByVal strRequest As String, _
ByRef strUnitInfo As String,
Optional ByVal strStationName As String = "") As Long

示例调用代码可以是:

Dim lRet As Long
    Dim strXML as String
    lRet = GetUnitInfo( _“&lt;?xml version=""1.0"" ?><GetUnitInfo 
    xmlns=""urn:GetUnitInfo-schema"" SerialNumber=""BD3ZZTC8MA"" />",  strXML)

所以我尝试使用一些虚拟参数运行此方法,因为如果参数不正确,该方法将返回错误。命令:

RUNDLL32.EXE FFTester.dll, GetUnitInfo test1, test2

但我收到此错误:

在此处输入图像描述

我使用“Dependency Walker”列出了 dll 文件中的函数: 在此处输入图像描述

但这就是所有功能,通常我希望还会列出“GetUnitInfo”。

有人可以帮忙吗?不强制使用 RUNDLL32。

稍后编辑:我想从用 JAVA 编写的工具中调用此 DLL,我尝试使用 JNA 但失败了,所以我想从命令行调用 dll 函数,因为如果这样我可以使用进程构建器来执行命令。

4

1 回答 1

1

我解决了我的问题,我会提供一个解决方案,也许它会帮助别人。

我使用com4j库为我的 dll 生成接口。在此之后,您需要注册您的 DLL,否则您的代码很可能会抛出“ComException”,您可以在我的第二个问题中阅读更多内容。要注册 DLL:

C:\Windows\SysWOW64>regsvr32.exe“你的 DLL 的路径”对于 32 位 DLL

或者

C:\Windows\System32>regsvr32.exe“你的 DLL 的路径”对于 64 位 DLL

此外,根据您的 DLL 类型(32 位或 64 位),您需要使用正确的 Eclipse/JDK。

于 2018-05-20T08:19:52.033 回答