使用 Java 调用 .dll 函数
Call .dll functions using Java
我需要为客户端编写一个从“.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)
所以我尝试 运行 使用一些虚拟参数的方法,因为如果参数不正确,方法 returns 会出错。命令:
RUNDLL32.EXE FFTester.dll, GetUnitInfo test1, test2
但是我收到这个错误:
我使用 "Dependency Walker" 列出了 dll 文件中的函数:
但这就是所有的功能,通常我希望 "GetUnitInfo" 也被列出。
有人可以帮忙吗?不强制使用 RUNDLL32。
稍后编辑:
我想从一个用 JAVA 编写的工具调用这个 DLL,我尝试使用 JNA 但我失败了,所以我想从命令行调用 dll 函数,因为如果这可行,我可以使用进程构建器执行命令。
我解决了我的问题,我会提供一个解决方案,也许它会对其他人有所帮助。
我用了com4j library to generate the interfaces for my dll. After this you need to register your DLL otherwise most problely your code will throw an "ComException", you can read more 。
要注册 DLL:
C:\Windows\SysWOW64>regsvr32.exe "path to your DLL" 对于 32 位 DLL
或
C:\Windows\System32>regsvr32.exe "path to your DLL" 64 位 DLL
另外,根据您的 DLL 类型,32 位或 64 位,您需要使用适当的 Eclipse/JDK。
我需要为客户端编写一个从“.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)
所以我尝试 运行 使用一些虚拟参数的方法,因为如果参数不正确,方法 returns 会出错。命令:
RUNDLL32.EXE FFTester.dll, GetUnitInfo test1, test2
但是我收到这个错误:
我使用 "Dependency Walker" 列出了 dll 文件中的函数:
但这就是所有的功能,通常我希望 "GetUnitInfo" 也被列出。
有人可以帮忙吗?不强制使用 RUNDLL32。
稍后编辑: 我想从一个用 JAVA 编写的工具调用这个 DLL,我尝试使用 JNA 但我失败了,所以我想从命令行调用 dll 函数,因为如果这可行,我可以使用进程构建器执行命令。
我解决了我的问题,我会提供一个解决方案,也许它会对其他人有所帮助。
我用了com4j library to generate the interfaces for my dll. After this you need to register your DLL otherwise most problely your code will throw an "ComException", you can read more
C:\Windows\SysWOW64>regsvr32.exe "path to your DLL" 对于 32 位 DLL
或
C:\Windows\System32>regsvr32.exe "path to your DLL" 64 位 DLL
另外,根据您的 DLL 类型,32 位或 64 位,您需要使用适当的 Eclipse/JDK。