使用Java调用.dll函数

时间:2018-05-17 13:10:01

标签: java dll jna rundll32

我需要为从“.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( _“<?xml version=""1.0"" ?><GetUnitInfo 
    xmlns=""urn:GetUnitInfo-schema"" SerialNumber=""BD3ZZTC8MA"" />",  strXML)

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

RUNDLL32.EXE FFTester.dll, GetUnitInfo test1, test2

但是我收到了这个错误:

enter image description here

我用“Dependency Walker”列出了dll文件中的函数: enter image description here

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

有人可以帮忙吗?不一定要使用RUNDLL32。

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

1 个答案:

答案 0 :(得分:0)

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

我使用com4j库为我的dll生成接口。在此之后,您需要注册您的DLL,否则最有问题的是您的代码将抛出“ComException”,您可以阅读更多in my second question。 注册DLL:

对于32位DLL,

C:\ Windows \ SysWOW64&gt; regsvr32.exe“DLL的路径”

对于64位DLL,

C:\ Windows \ System32&gt; regsvr32.exe“DLL的路径”

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