Comparar commits

...

168 Commits

Autor SHA1 Mensagem Data
Daniel Doubrovkine (dB.) @dblockdotorg 296e89e7c6 Merge pull request #334 from msteiger/knownfolder
Added Shell32.SHGetKnownFolderPath and corresponding constants
2014-05-26 06:55:28 -04:00
Martin Steiger e52c4255d9 Fixed inheritance of LPVOID and simplified access to CoTaskMem* 2014-05-25 17:32:13 +02:00
Martin Steiger a0eaa3fb95 Merge remote-tracking branch 'twall/master' into knownfolder 2014-05-25 17:02:45 +02:00
Martin Steiger bf870bb9e3 Added Win32 Monitor Configuration API in com.sun.jna.platform.win32.Dxva2. 2014-05-24 15:09:05 -04:00
Martin Steiger 8d4aa48713 Added Shell32.SHGetKnownFolderPath and corresponding constants 2014-05-24 12:55:05 +02:00
Martin Steiger 21d459bb55 Added CoTaskMemAlloc, CoTaskMemRealloc and CoTaskMemFree to com.sun.jna.platform.win32.Ole32. 2014-05-23 11:52:03 -04:00
Tobias 05210b2332 added my changes 2014-05-23 09:57:41 +02:00
Tobias 942380eadd Added Winspool monitor sample and updated Kernel32, WinBase, Winspool
Added a full running Winspool monitor sample to demonstrate how to watch
for new print jobs added to the spooler on windows.
2014-05-23 09:55:38 +02:00
Tobias e0ff9cd8d3 Some minor changes to MS Office samples
Test and small changes to the MS Office samples
2014-05-22 09:55:27 +02:00
Tobias 3470e24b46 New MS Word sample
Providing new samples with MS Word 14 running on Windows 7/64bit
2014-05-21 13:11:18 +02:00
Tobias ab513b62a0 Variant and TlbImp Fix
Small fixes to answer support calls
2014-05-21 11:25:02 +02:00
Timothy Wall da6c521e1c add change entry for PR #319 2014-05-13 06:17:41 -04:00
Timothy Wall 5115f143ce Merge pull request #319 from marco2357/master
fixed direct-mapping type-mapped pointer result types
2014-05-13 06:11:52 -04:00
Timothy Wall 64466deb5e Ensure exception message includes all faulty field information (fixes broken test) 2014-04-21 06:21:58 -04:00
Timothy Wall d8638912f0 fix build on newer mac OSX (10.8/10.9) 2014-04-21 06:06:02 -04:00
Timothy Wall 87c582ce23 Merge pull request #321 from headcr4sh/patch-1
Add syntax highlighting to C- and Java code

Oooh, pretty!
2014-04-20 14:56:04 -04:00
Benjamin P. Jung 9f1361b533 Add syntax highlighting to C- and Java code 2014-04-20 20:08:29 +02:00
Timothy Wall 323a913bf6 Merge pull request #290 from ebourg/master
Exception chaining for com.sun.jna.Structure
2014-04-09 20:56:21 -04:00
Taco deff187509 removed unused imports 2014-04-09 18:49:14 +02:00
Taco cfbe750615 improved testcase 2014-04-09 18:33:31 +02:00
Emmanuel Bourg 32447ce488 Added an entry in the changelog for #290 2014-04-09 17:51:49 +02:00
Emmanuel Bourg 27c7d3ad49 Exception chaining for com.sun.jna.Structure 2014-04-09 17:20:55 +02:00
Timothy Wall 9340b94e63 Merge pull request #314 from andymcd/aarch64
Add and bundle support for AArch64
2014-04-09 07:13:20 -04:00
Taco d7bb1e189f fixed direct-mapping type-mapped pointer result types 2014-04-08 18:23:44 +02:00
Andrew McDermott 6cd4216336 Add and bundle support for AArch64
Signed-off-by: Andrew McDermott <andrew.mcdermott@linaro.org>
2014-04-04 05:44:12 +00:00
Daniel Doubrovkine (dB.) @dblockdotorg bbef9fa6ab Fixed link to JavaDoc. 2014-03-31 07:11:38 -04:00
Timothy Wall 28fc8ce789 enable AIX build, update natives 2014-03-18 17:16:31 -07:00
Daniel Doubrovkine (dB.) 8508354adc Merge pull request #307 from tyrcho/patch-1
fix javadoc links
2014-03-08 10:52:17 -05:00
Michel Daviot 6d8bf1eaf4 fix javadoc links 2014-03-08 13:30:41 +01:00
dB d498bd9493 Preparing for development, 4.1.1. 2014-03-06 11:10:44 -05:00
dB c490fc9101 Release 4.1.0 to Maven Central. 2014-03-06 11:06:40 -05:00
dB 05348f6c26 Moved general docs from publishing to maven central to releasing. 2014-03-06 10:58:09 -05:00
dB bfc02645a0 You don't need permissions to Sonatype, the explanation to get java.net access is right above. 2014-03-06 10:48:00 -05:00
dB 46238caafb Push at the very end, so everything is staged. 2014-03-06 08:48:56 -05:00
dB 2a756c628a Switch order of release because download links point to Maven central. 2014-03-06 08:42:10 -05:00
dB 56eb5c7d4a Added documentation on where to request access to Sonatype. 2014-03-06 08:40:13 -05:00
dB 1bd0db1148 Release 4.1.0. 2014-03-06 08:18:49 -05:00
dB dc013ea124 Release 4.1. 2014-03-06 08:04:24 -05:00
dB 34d87fd98f Preparing for 4.1 release. 2014-03-06 08:00:08 -05:00
Timothy Wall 71631fb543 Merge pull request #306 from swills/master
Use getCanonicalPath instead of getAbsolutePath for native library tests
2014-02-27 06:56:42 -05:00
Steve Wills 4934eb644b Use getCanonicalPath instead of getAbsolutePath for these two tests 2014-02-26 23:05:40 +00:00
Timothy Wall f3e7ede297 Tighten prose. 2014-02-23 08:35:06 -05:00
Daniel Doubrovkine (dB.) 2c0d097389 Merge pull request #301 from BusyByte/master
Added Advapi32Util accessCheck method to verify file permissions
2014-01-22 14:35:06 -08:00
pair9 e3aa9cd1a2 Changed Advapi32Test.testAccessCheck to work on non-US-English systems and general cleanup 2014-01-22 16:24:12 -06:00
pair9 d84910a762 Added test for com.sun.jna.platform.win32.Advapi32.AccessCheck and updated changelog markup 2014-01-22 13:24:20 -06:00
Timothy Wall 2c16197d0f Merge branch 'issue-300' of github.com:twall/jna 2014-01-21 22:45:49 -05:00
Timothy Wall 2e4c4349dd Merge branch 'issue-300' of github.com:twall/jna into issue-300 2014-01-21 22:44:53 -05:00
Timothy Wall 5d4e9b14fd update change log 2014-01-21 22:44:25 -05:00
Timothy Wall feecc7fd1e Merge branch 'issue-300' of github.com:twall/jna 2014-01-21 22:42:36 -05:00
Shawn Garner 3f23dc3ffb Addressed code review items from pull request 2014-01-22 02:35:26 +00:00
Shawn Garner 5ce1658269 Added Advapi32Util accessCheck method to verify file permissions 2014-01-21 04:53:49 +00:00
Timothy Wall 75a532b088 update natives 2014-01-13 02:24:32 -05:00
Timothy Wall 8aa8a2e090 update native 2014-01-13 02:23:39 -05:00
Timothy Wall 4836f05059 don't align arguments in stdcall 2014-01-13 02:23:08 -05:00
Timothy Wall ed35e7b973 fix clallback prototype 2014-01-13 01:16:23 -05:00
Timothy Wall 4e4dbda6f0 add extra args, triggering stdcall stack bug 2014-01-13 00:52:47 -05:00
Timothy Wall 6756267f48 attempt to reproduce issue #300 2014-01-12 17:06:13 -05:00
Tobias 87200e8006 Some Changes to the COM support
- New feature for supporting also DispId`s for Tlb generation.
- Added new parameter to TlbImp source code generator for selecting a
custom output directory.
2014-01-03 20:21:57 +01:00
Barry Roberts 35c743df72 Added com.sun.jna.platform.win32.Kernel32.ResetEvent. 2013-12-11 08:58:32 -05:00
Daniel Doubrovkine (dB.) c94c3b9ee0 Merge pull request #292 from ebourg/unused-imports
Remove unused imports
2013-11-15 15:24:33 -08:00
Emmanuel Bourg 1d0988127d Removed unused imports 2013-11-15 23:44:34 +01:00
Daniel Doubrovkine (dB.) e736b45a35 Merge pull request #291 from ebourg/stringbuilders
Replace StringBuffers with StringBuilders
2013-11-15 14:42:39 -08:00
Emmanuel Bourg e67a50c904 Replaced StringBuffers with StringBuilders 2013-11-15 23:11:08 +01:00
Timothy Wall 6f37195ce2 cloudbees test trigger 2013-11-14 07:01:12 -05:00
Timothy Wall 9785311050 cloudbees test trigger 2013-11-14 07:00:51 -05:00
Timothy Wall ed5dac53cc fix typo in javadoc 2013-11-08 07:08:40 -05:00
Daniel Doubrovkine (dB.) 6b25643334 Update CHANGES.md 2013-11-06 11:49:20 -08:00
Daniel Doubrovkine (dB.) 667fdd1e32 Merge pull request #287 from daifei4321/master
Updated Win32WindowDemo.java
2013-11-06 11:46:50 -08:00
Dai Fei a0c486f826 Update CHANGES.md 2013-10-29 15:27:40 +08:00
daifei4321 a41d97d9e8 Update Win32WindowDemo.java
Used DBT.DBTF_MEDIA to replace 1.
Used DBT.DBTF_NET to replace 2.
2013-10-25 16:17:38 +08:00
daifei4321 30b64fb78c Fixed 2 bugs in Win32WindowDemo.java
Added setting dbcc_size before RegisterDeviceNotification.
Create DEV_BROADCAST_DEVICEINTERFACE only when should.
Added extra info (drive letter, change to media in drive or to physical drive, is network drive) for logic drive add/remove.
2013-10-25 16:10:56 +08:00
daifei4321 f277c9dce2 Update DBT.java added DBTF_MEDIA and DBTF_NET 2013-10-25 15:05:24 +08:00
Markus KARG c7dcf61bb6 Added com.sun.jna.platform.win32.Kernel32.GetPrivateProfileSection, GetPrivateProfileSectionNames and WritePrivateProfileSection and corresponding Kernel32Util helpers. 2013-10-07 19:58:36 -04:00
Daniel Doubrovkine (dB.) 438d1313fc Merge pull request #280 from dblock/kc7bfi-merged
#270 + #271: Added OpenGL32 support.
2013-10-06 17:05:45 -07:00
dB e465dca4ce Moved OpenGL declarations in the corresponding file(s) with the Windows SDK. 2013-10-06 20:00:01 -04:00
David Robinson 99bd756eab Added OpenGL32 support. 2013-10-06 14:31:37 -04:00
Timothy Wall b2e16d4f6c fixes issue #279 2013-10-06 13:23:46 -04:00
Timothy Wall 6f13f2e6d9 Accommodate altered libc loading on FreeBSD 2013-10-06 13:21:45 -04:00
Timothy Wall f5d7955f41 clean up new files (line termination and errant unicode) 2013-10-05 16:38:00 -04:00
Daniel Doubrovkine (dB.) 0aab1f52a5 Merge pull request #278 from dblock/lpolestr-fix
Fix: LPOLESTR constructor with a string doesn't allocate memory.
2013-10-05 06:56:49 -07:00
Daniel Doubrovkine (dB.) 8dd1592f70 Merge pull request #276 from dblock/fix-tests
Removed dependency on JNA_LIB and contrib paths.
2013-10-04 04:48:19 -07:00
dB eaf9e25461 Fix: LPOLESTR constructor with a string doesn't allocate memory. 2013-10-04 07:46:51 -04:00
Daniel Doubrovkine (dB.) deb7cc68f4 Merge pull request #277 from dblock/shortcut-clsids
Fix: use shell objects available on all versions of Windows.
2013-10-04 04:31:07 -07:00
dB 5b3a782ab7 Fix: use shell objects available on all versions of Windows. 2013-10-04 07:28:09 -04:00
Daniel Doubrovkine (dB.) 66fcd236cf Merge pull request #272 from dblock/windows-build
Choose whether to use MSVC based on MSVC env.
2013-10-04 04:13:01 -07:00
dB 487dab42de Removed dependency on JNA_LIB and contrib paths. 2013-10-04 06:58:10 -04:00
Daniel Doubrovkine (dB.) bb27c09164 Merge pull request #274 from dblock/fix-tests
Fix: use a different CLSID, remove dependency on Word.
2013-10-04 03:48:58 -07:00
dB f6ceaf3355 Merged from master. 2013-10-04 06:46:13 -04:00
dB cb8f9dd7df Fix: use a different CLSID, remove dependency on Word. 2013-10-03 09:29:33 -04:00
dB 395bffcf72 Choose whether to use MSVC based on MSVC environment variable. 2013-10-02 14:21:26 -04:00
Daniel Doubrovkine 35cc5e2e31 Fix: Win32 unit tests. 2013-09-26 07:28:58 -04:00
Daniel Doubrovkine 4df5e827a7 Merged #253. 2013-09-25 07:21:59 -04:00
Daniel Doubrovkine 8de77d3df3 Merged RAS32 API support. 2013-09-25 06:50:00 -04:00
drrobison 8a4a7e1b1a More tests 2013-09-23 16:32:18 -04:00
drrobison 7dc7547271 Change log 2013-09-23 16:00:40 -04:00
Timothy Wall 4ee5e0efec update changelog 2013-09-21 07:30:14 -04:00
Timothy Wall e79f6e0e04 Merge pull request #266 from brettwooldridge/master
Fix for issue#226 "Convert platform to OSGi"

Verified that new OSGI entries show up in jna-platform.jar.
2013-09-21 04:25:48 -07:00
Brett Wooldridge 9de200502a Build jna-platform jar with OSGi headers. Fix OSGi "Bundle-version" header of core jna.jar to contain full version number, rather
than just ${jna.major} number.
2013-09-20 13:05:07 +09:00
Brett Wooldridge 57197d3cc8 Revert "Build jna-platform jar with OSGi headers. Fix OSGi "Bundle-version" header of core jna.jar to contain full version number, rather"
This reverts commit e4a1158b50.
2013-09-20 13:04:05 +09:00
Brett Wooldridge e4a1158b50 Build jna-platform jar with OSGi headers. Fix OSGi "Bundle-version" header of core jna.jar to contain full version number, rather
than just ${jna.major} number.
2013-09-20 12:55:19 +09:00
drrobison 23a7cbaf11 Provide support for the Windows RAS32 API 2013-09-19 11:52:13 -04:00
Timothy Wall 21765f9a9c fix WinDef.POINT references 2013-09-19 07:13:29 -04:00
Timothy Wall bc0b30fec5 Merge branch 'master' of github.com:twall/jna 2013-09-19 07:10:11 -04:00
Timothy Wall 6883010c0f fix WinDef.POINT references 2013-09-19 07:09:45 -04:00
Timothy Wall 3fc7603da8 remove console output from tests (COM tests still need cleanup and proper assertions) 2013-09-14 15:28:24 -04:00
Tobias 79c3521c94 some extensions to support dispid 2013-08-23 17:01:56 +02:00
Tobias 1d6fa14851 some code improvement and cleaning up 2013-08-23 13:39:53 +02:00
Tobias ddecf09700 some small bug fixes to TLB generating 2013-08-20 15:38:01 +02:00
Tobias e9d3793b61 some changes 2013-08-20 13:58:30 +02:00
Tobias 5ec1f87113 bug trapping code 2013-08-20 11:23:55 +02:00
Tobias Wolf f35fe81b40 some changes to find the bug 2013-08-20 08:18:54 +02:00
Timothy Wall 4d0f5ab5d5 remove DOS line terminators 2013-08-19 18:51:35 -04:00
Timothy Wall 919a31f16e fix incorrectly-named 'byReference' classes to 'ByReference' 2013-08-19 16:56:38 -04:00
Tobias 938ee0ddd8 removal of file 2013-08-19 15:08:34 +02:00
Tobias 4f9260b35e some changes to find issue with JNA 4 2013-08-19 15:07:36 +02:00
Tobias 6e0690aa70 Merge pull request #254 from twall/com-branch
After a while I didn`t got any feedback, therefore I merge the code
2013-08-19 00:35:51 -07:00
Tobias 854165453a some changes
added some unit tests
2013-08-09 14:56:54 +02:00
Tobias 04d74c8ba5 arrays extended and unit test 2013-08-09 10:08:35 +02:00
Tobias 0ddf39c979 added some test 2013-08-08 14:05:15 +02:00
Tobias 842904ad44 removeed all array initialisation code 2013-08-07 13:54:55 +02:00
Tobias 20b582e97b some changes 2013-08-07 11:21:03 +02:00
Tobias 2553a95c95 some changes 2013-08-06 16:28:14 +02:00
Tobias f989080691 removed some warnings 2013-08-06 14:24:22 +02:00
Tobias 02230ef692 some changes 2013-08-06 11:02:24 +02:00
Tobias d8d9c62de1 git shows me changes (old/new) 2013-08-06 10:58:37 +02:00
Tobias c1ac91e00f some changes to jna 4 2013-08-06 10:54:33 +02:00
Tobias 4f1f03346f some changes 2013-08-06 10:52:24 +02:00
Tobias 8c9e2e67ef some changes to support jna 4 2013-08-06 10:24:41 +02:00
Tobias 2c32c5596e changes including update to jna 4.0 2013-08-05 18:12:25 +02:00
Tobias af8c85428d merge commit 2013-08-05 15:48:37 +02:00
Tobias 2bb0ac91d1 some cosmetics 2013-08-05 10:58:49 +02:00
Tobias 8f24f1d82a Update README.md 2013-08-05 10:35:33 +02:00
Tobias 6762c42a18 Update CHANGES.md 2013-08-05 10:32:45 +02:00
Falldog f1903d903c Update CHANGES.md 2013-08-02 23:00:12 +08:00
Tobias 2ee9962838 some changes to TlbImp 2013-08-02 11:15:05 +02:00
Tobias 9f4155a150 some changes 2013-08-01 18:03:00 +02:00
Falldog 44f6e5ab76 Modify the API in Advapi32Util for support registryGetKey() in WOW64 flag 2013-07-31 15:46:47 +08:00
Tobias b10c508a6b some changes 2013-07-30 16:00:19 +02:00
Timothy Wall 70f3c4757f remove superfluous (and problematic) utf8 BOM 2013-07-22 07:19:39 -04:00
Timothy Wall 15b2df4acf enable platform tests to run w/o native build bits 2013-07-22 06:59:34 -04:00
Daniel Doubrovkine (dB.) 3157243deb Merge pull request #249 from Falldog/master
Add registryCloseKey()
2013-07-21 09:33:19 -07:00
Timothy Wall 95526ab823 fix bug if ByValue types are explicitly used in struct fields 2013-07-21 09:03:15 -04:00
falldog cf6b5e4dce Add UnitTest testRegistryGetCloseKey & update CHANGES.md 2013-07-20 09:32:27 +08:00
falldog 4b245b9053 Add registryCloseKey() for close registry key by registryGetKey() 2013-07-19 11:00:26 +08:00
Timothy Wall 923cd5a937 fix javadoc links 2013-07-15 07:03:50 -04:00
Daniel Doubrovkine (dB.) 342afd7221 Fixed JNA platform download link. 2013-07-12 11:52:59 -04:00
Timothy Wall 91a9bd6ab3 remove non-ascii from javadoc 2013-07-06 09:16:27 -04:00
Timothy Wall b980a28c91 bump version 2013-07-04 14:51:52 -04:00
Tobias 3f182664be some changes 2013-06-24 18:28:33 +02:00
Tobias Wolf 327b429d79 some changes 2013-06-09 20:18:31 +02:00
Tobias Wolf 55cca7220a some changes 2013-06-09 13:09:40 +02:00
Timothy Wall 528036e9e3 remove inadvertently added files 2013-05-20 23:20:47 -04:00
Tobias Wolf 7ae490a393 make parameter reverse ordering as expected by COM runtime 2013-05-20 12:13:42 +02:00
Tobias Wolf 4c114f7796 added sample for MSWord SaveAs function 2013-05-20 10:49:46 +02:00
Tobias 4f84e1b325 some changes for typelib 2013-04-15 17:50:13 +02:00
Tobias d7ed79ea07 some changes for typelib parsing 2013-04-04 17:42:45 +02:00
Tobias 68010b6752 some changes 2013-04-03 18:17:38 +02:00
Tobias d74598979a some changes 2013-04-02 18:02:02 +02:00
Tobias 6166a169e3 some changes 2013-03-27 17:13:02 +01:00
Tobias 2a51bbfba5 some changes 2013-03-26 17:44:10 +01:00
Tobias d56c74724c some changes to typelib parsing 2013-03-22 10:30:27 +01:00
Tobias 27e9f0f005 some changes to typelib parsing 2013-03-20 18:05:31 +01:00
Tobias 832845535a some minor changes 2013-03-20 17:00:01 +01:00
Tobias fcf1f5c283 restored because of lost source code 2013-03-19 17:21:29 +01:00
Tobias 47d1f3cc89 some changes 2013-03-19 14:46:40 +01:00
Tobias 58b89ebc55 some changes 2013-03-19 13:04:35 +01:00
Tobias bbc1d4b432 some changes regarding typelib 2013-03-18 17:11:20 +01:00
Tobias e00752087b some changes 2013-03-15 16:44:07 +01:00
202 arquivos alterados com 22766 adições e 10046 exclusões
-2
Ver Arquivo
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" output="jna/build.eclipse/test-classes" path="contrib/platform/test"/>
<classpathentry kind="src" path="contrib/platform/src"/>
<classpathentry kind="src" output="build.eclipse/test-classes" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
+3 -1
Ver Arquivo
@@ -18,4 +18,6 @@ dist/src-mvn.zip
dist/out-of-date.jar
perf*.txt
native/libffi/doc/libffi.info
junit-*
junit-*
pom-jna.xml.asc
pom-jna-platform.xml.asc
-62
Ver Arquivo
@@ -1,62 +0,0 @@
#Wed Aug 29 20:43:29 EDT 2007
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
org.eclipse.jdt.core.compiler.problem.deprecation=warning
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
org.eclipse.jdt.core.compiler.problem.nullReference=ignore
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=ignore
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.5
@@ -1,3 +0,0 @@
#Tue Mar 27 21:18:08 EDT 2007
eclipse.preferences.version=1
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
+47 -3
Ver Arquivo
@@ -1,10 +1,53 @@
Release 4.0
===========
NOTE: as of JNA 4.0, JNA is now dual-licensed under LGPL and ASL (see LICENSE).
NOTE: JNI native support is typically incompatible between minor versions, and almost always incompatible between major versions.
Next Release
============
Features
--------
* Updated AIX natives and build - [@twall](https://github.com/twall).
* [#290](https://github.com/twall/jna/pull/290): Improved the stacktrace for the exceptions thrown by `com.sun.jna.Structure` - [@ebourg](https://github.com/ebourg).
* [#332](https://github.com/twall/jna/pull/332): Added Win32 Monitor Configuration API in `com.sun.jna.platform.win32.Dxva2` - [@msteiger](https://github.com/msteiger).
* Added Winspool monitor sample and updated Kernel32, WinBase, Winspool - [@wolftobias](https://github.com/wolftobias).
* Added Some minor changes to MS Office samples Test and small changes to the MS Office samples Bug Fixes - [@wolftobias](https://github.com/wolftobias).
* [#333](https://github.com/twall/jna/pull/333): Added `CoTaskMemAlloc`, `CoTaskMemRealloc` and `CoTaskMemFree` to `com.sun.jna.platform.win32.Ole32` - [@msteiger](https://github.com/msteiger).
* [#334](https://github.com/twall/jna/pull/334): Added `com.sun.jna.platform.win32.Shell32.SHGetKnownFolderPath` and `KnownFolders` GUID constants - [@msteiger](https://github.com/msteiger).
Bug Fixes
---------
* [#319](https://github.com/twall/jna/pull/319): Fix direct-mapping type-mapped pointer result types - [@marco2357](https://github.com/marco2357).
* Added Variant and TlbImp Fixes - [@wolftobias](https://github.com/wolftobias).
Release 4.1
===========
Features
--------
* Added `com.sun.jna.platform.win32.Advapi32Util.registryCloseKey` - [@falldog](https://github.com/falldog).
* Enabled platform tests to be run w/o building native bits - [@twall](https://github.com/twall).
* Added COM/Typelib java code generator `com.sun.jna.platform.win32.COM.tlb.TlbImp` - [@wolftobias](https://github.com/wolftobias).
* [#226](https://github.com/twall/jna/issues/226): Added OSGI information to jna-platform.jar - [@brettwooldridge](https://github.com/brettwooldridge).
* [#267](https://github.com/twall/jna/pull/267): Added support for Windows RAS32 API, `com.sun.jna.platform.win32.Rasapi32` and `Rasapi32Util` - [@kc7bfi](https://github.com/kc7bfi).
* [#101](https://github.com/twall/jna/issues/101): Modify `com.sun.jna.platform.win32.Advapi32Util.registryGet*` API to support `KEY_WOW64` option - [@falldog](https://github.com/falldog).
* [#271](https://github.com/twall/jna/pull/271): Added `com.sun.jna.platform.win32.Gdi32.ChoosePixelFormat` and `SetPixelFormat` - [@kc7bfi](https://github.com/kc7bfi).
* [#271](https://github.com/twall/jna/pull/271): Added `com.sun.jna.platform.win32.OpenGL32`, `OpenGL32Util` and `WinOpenGL` - [@kc7bfi](https://github.com/kc7bfi).
* [#250](https://github.com/twall/jna/pull/250): Added `com.sun.jna.platform.win32.Kernel32.GetPrivateProfileSection`, `GetPrivateProfileSectionNames` and `WritePrivateProfileSection` and corresponding `Kernel32Util` helpers - [@quipsy-karg](https://github.com/quipsy-karg).
* [#287](https://github.com/twall/jna/pull/287): Added `DBTF_MEDIA` and `DBTF_NET` to `com.sun.jna.platform.win32.DBT` - [@daifei4321](https://github.com/daifei4321).
* [#295](https://github.com/twall/jna/pull/295): Added `com.sun.jna.platform.win32.Kernel32.ResetEvent` - [@manithree](https://github.com/manithree).
* [#301](https://github.com/twall/jna/pull/301): Added `accessCheck` to `com.sun.jna.platform.win32.Advapi32Util`, `MapGenericMask` and `AccessCheck` to `com.sun.jna.platform.win32.Advapi32`, `PRIVILEGE_SET` and `GENERIC_MAPPING` to `com.sun.jna.platform.win32.WinNT` - [@BusyByte](https://github.com/BusyByte).
Bug Fixes
---------
* Fixed inconsistent behavior on `Structure.ByValue` fields within a `Structure` - [@twall](https://github.com/twall).
* [#279](https://github.com/twall/jna/issues/279): Accommodate FreeBSD libc loading - [@sevan](https://github.com/sevan).
* [#287](https://github.com/twall/jna/pull/287): Fixed contrib `win32.Win32WindowDemo`, now showing the added/removed drive letter, and whether the event is about media in drive or physical drive - [@daifei4321](https://github.com/daifei4321).
* [#300](https://github.com/twall/jna/issues/300): Fix stdcall argument alignment - [@twall](https://github.com/twall).
Release 4.0
===========
Features
--------
* Added ASL licensing to facilitate distribution - [@twall](https://github.com/twall).
@@ -676,3 +719,4 @@ Bug Fixes
* Properly handle NULL when the return value is a Structure
* Proper conversion to wchar_t on linux
* Copy full length of Java strings to C strings instead of stopping when a NUL character is encountered
+19 -14
Ver Arquivo
@@ -3,25 +3,29 @@
Java Native Access (JNA)
========================
The definitive JNA reference (including an overview and usage details) is in the [JavaDoc](http://twall.github.com/jna/4.0/javadoc/). Please read the [overview](http://twall.github.com/jna/4.0/javadoc/overview-summary.html#overview_description). Questions, comments, or exploratory conversations should begin on the [mailing list](http://groups.google.com/group/jna-users), although you may find it easier to find answers to already-solved problems on [StackOverflow](http://stackoverflow.com/questions/tagged/jna).
The definitive JNA reference (including an overview and usage details) is in the [JavaDoc](http://twall.github.com/jna/4.1.0). Please read the [overview](http://twall.github.io/jna/4.1.0/overview-summary.html#overview_description). Questions, comments, or exploratory conversations should begin on the [mailing list](http://groups.google.com/group/jna-users), although you may find it easier to find answers to already-solved problems on [StackOverflow](http://stackoverflow.com/questions/tagged/jna).
JNA provides Java programs easy access to native shared libraries (DLLs on Windows) without writing anything but Java code - no JNI or native code is required. This functionality is comparable to Windows' Platform/Invoke and Python's ctypes. Access is dynamic at runtime without code generation.
JNA provides Java programs easy access to native shared libraries without writing anything but Java code - no JNI or native code is required. This functionality is comparable to Windows' Platform/Invoke and Python's ctypes.
JNA allows you to call directly into native functions using natural Java method invocation. The Java call looks just like it does in native code. Most calls require no special handling or configuration; no boilerplate or generated code is required.
JNA allows you to call directly into native functions using natural Java method invocation. The Java call looks just like the call does in native code. Most calls require no special handling or configuration; no boilerplate or generated code is required.
The JNA library uses a small native library stub to dynamically invoke native code. The developer uses a Java interface to describe functions and structures in the target native library. This makes it quite easy to take advantage of native platform features without incurring the high overhead of configuring and building JNI code for multiple platforms.
JNA uses a small JNI library stub to dynamically invoke native code. The developer uses a Java interface to describe functions and structures in the target native library. This makes it quite easy to take advantage of native platform features without incurring the high overhead of configuring and building JNI code for multiple platforms.
While some attention is paid to performance, correctness and ease of use take priority.
While significant attention has been paid to performance, correctness and ease of use take priority.
JNA includes a platform library with many native functions already mapped as well as a set of utility interfaces that simplify native access.
In addition, JNA includes a platform library with many native functions already mapped as well as a set of utility interfaces that simplify native access.
Projects Using JNA
==================
JNA is a mature library with dozens of contributors and hundreds of commercial and non-commercial projects that use it. If you're using JNA, feel free to [tell us about it](http://groups.google.com/group/jna-users). Include some details about your company, project name, purpose and size and tell us how you use the library.
Download
========
Version 4.0
Version 4.1.0
* [jna.jar](https://maven.java.net/content/repositories/releases/net/java/dev/jna/jna/4.0.0/jna-4.0.0.jar)
* [jna-platform.jar](https://maven.java.net/content/repositories/releases/net/java/dev/jna/platform/4.0.0/jna-platform-4.0.0.jar)
* [jna.jar](https://maven.java.net/content/repositories/releases/net/java/dev/jna/jna/4.1.0/jna-4.1.0.jar)
* [jna-platform.jar](https://maven.java.net/content/repositories/releases/net/java/dev/jna/jna-platform/4.1.0/jna-platform-4.1.0.jar)
Features
========
@@ -46,6 +50,8 @@ Features
* Type-safety for native pointers
* VM crash protection (optional)
* Optimized direct mapping for high-performance applications.
* COM support for early and late binding.
* COM/Typelib java code generator.
Community and Support
=====================
@@ -79,12 +85,12 @@ Using the Library
* [Platform Library](https://github.com/twall/jna/blob/master/www/PlatformLibrary.md)
* [Direct Method Mapping](https://github.com/twall/jna/blob/master/www/DirectMapping.md) (Optimization)
* [Frequently Asked Questions (FAQ)](https://github.com/twall/jna/blob/master/www/FrequentlyAskedQuestions.md)
* [Avoiding Crashes](http://twall.github.com/jna/4.0.0/javadoc/overview-summary.html#crash-protection)
* [Avoiding Crashes](http://twall.github.com/jna/4.1.0/javadoc/overview-summary.html#crash-protection)
Primary Documentation (JavaDoc)
===============================
The definitive JNA reference is in the [JavaDoc](http://twall.github.com/jna/4.0.0/javadoc/).
The definitive JNA reference is in the [JavaDoc](http://twall.github.com/jna/4.1.0/).
Developers
==========
@@ -107,9 +113,8 @@ If you are interested in paid support, feel free to say so on the [jna-users mai
License
=======
This library is licensed under the LGPL, version 2.1 or later, and (from
version 4.0 onward) the Apache Software License, version 2.0. Commercial
license arrangements are negotiable.
This library is licensed under the LGPL, version 2.1 or later, and (from version 4.0 onward) the Apache Software License, version 2.0. Commercial license arrangements are negotiable.
*NOTE: Oracle is not sponsoring this project, even though the package name (com.sun.jna) might imply otherwise.*
+53 -5
Ver Arquivo
@@ -56,8 +56,8 @@
<buildnumber/>
<!-- JNA library release version -->
<property name="jna.major" value="4"/>
<property name="jna.minor" value="0"/>
<property name="jna.revision" value="0"/>
<property name="jna.minor" value="1"/>
<property name="jna.revision" value="1"/>
<property name="jna.build" value="${build.number}"/>
<condition property="version.suffix" value="" else="-SNAPSHOT">
<or>
@@ -185,6 +185,7 @@
<os arch="sparcv9"/>
<os arch="ppc64"/>
<os arch="ia64"/>
<os arch="aarch64"/>
</or>
</and>
</condition>
@@ -356,7 +357,7 @@
<attribute name="Bundle-Name" value="jna"/>
<attribute name="Bundle-Description" value="JNA Library"/>
<attribute name="Bundle-SymbolicName" value="com.sun.jna"/>
<attribute name="Bundle-Version" value="${spec.version}"/>
<attribute name="Bundle-Version" value="${jna.major}.${jna.minor}.${jna.revision}"/>
<attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
<attribute name="Bundle-Vendor" value="${vendor}"/>
<attribute name="Bundle-ActivationPolicy" value="lazy"/>
@@ -397,6 +398,8 @@ com/sun/jna/linux-x86-64/libjnidispatch.so;
processor=x86-64;osname=linux,
com/sun/jna/linux-arm/libjnidispatch.so;
processor=arm;osname=linux,
com/sun/jna/linux-aarch64/libjnidispatch.so;
processor=aarch64;osname=linux,
com/sun/jna/linux-ia64/libjnidispatch.so;
processor=ia64;osname=linux,
@@ -437,6 +440,9 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
<zipfileset src="${lib.native}/linux-arm.jar"
includes="*jnidispatch*"
prefix="com/sun/jna/linux-arm"/>
<zipfileset src="${lib.native}/linux-aarch64.jar"
includes="*jnidispatch*"
prefix="com/sun/jna/linux-aarch64"/>
<zipfileset src="${lib.native}/linux-ia64.jar"
includes="*jnidispatch*"
prefix="com/sun/jna/linux-ia64"/>
@@ -489,6 +495,14 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
<property name="libs.junit.classpath" location="lib/junit.jar"/>
<property name="javac.source" value="${platform.compatibility}"/>
<property name="javac.target" value="${platform.compatibility}"/>
<!-- OSGi manifest properties -->
<property name="vendor" value="${vendor}"/>
<property name="impl.title" value="${impl.title}.platform"/>
<property name="impl.version" value="${impl.version}"/>
<property name="spec.title" value="${spec.title}"/>
<property name="spec.vendor" value="${spec.vendor}"/>
<property name="spec.version" value="${spec.version}"/>
<property name="osgi.version" value="${jna.major}.${jna.minor}.${jna.revision}"/>
<fileset dir="${contrib}" includes="platform/build.xml" />
</subant>
<!-- Sources package as required by maven -->
@@ -519,9 +533,12 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
<os name="OpenBSD"/>
</condition>
<property name="grep" value="grep"/>
<condition property="grep.required" value="false" else="true">
<os name="AIX"/>
</condition>
<!-- args are based on GNU grep, other versions may differ -->
<apply dir="${build.native}" executable="${grep}" parallel="true"
failonerror="true" relative="true" output="${md5.file}">
failonerror="${grep.required}" relative="true" output="${md5.file}">
<arg value="-A"/>
<arg value="1"/>
<arg value="JNIEXPORT"/>
@@ -544,6 +561,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
<checksum property="md5" file="${md5.file}" />
<condition property="jni.valid" value="true">
<or>
<os name="AIX"/>
<equals arg1="${jni.md5}" arg2="${md5}" trim="true"/>
<equals arg1="${jni.md5}" arg2=""/>
</or>
@@ -560,6 +578,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
<copy file="${lib.native}/out-of-date.jar" tofile="${lib.native}/linux-x86.jar" overwrite="true"/>
<copy file="${lib.native}/out-of-date.jar" tofile="${lib.native}/linux-x86-64.jar" overwrite="true"/>
<copy file="${lib.native}/out-of-date.jar" tofile="${lib.native}/linux-arm.jar" overwrite="true"/>
<copy file="${lib.native}/out-of-date.jar" tofile="${lib.native}/linux-aarch64.jar" overwrite="true"/>
<copy file="${lib.native}/out-of-date.jar" tofile="${lib.native}/linux-ia64.jar" overwrite="true"/>
<copy file="${lib.native}/out-of-date.jar" tofile="${lib.native}/linux-ppc.jar" overwrite="true"/>
<copy file="${lib.native}/out-of-date.jar" tofile="${lib.native}/linux-ppc64.jar" overwrite="true"/>
@@ -665,6 +684,21 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
<condition property="make.SDKROOT" value="SDKROOT=${SDKROOT}">
<isset property="SDKROOT"/>
</condition>
<property name="xcode" value="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform"/>
<condition property="make.SDKROOT"
value="SDKROOT=${xcode}/Developer/SDKs/MacOSX10.9.sdk">
<and>
<equals arg1="${os.prefix}" arg2="darwin" trim="true"/>
<available file="${xcode}/Developer/SDKs/MacOSX10.9.sdk"/>
</and>
</condition>
<condition property="make.SDKROOT"
value="SDKROOT=${xcode}/Developer/SDKs/MacOSX10.8.sdk">
<and>
<equals arg1="${os.prefix}" arg2="darwin" trim="true"/>
<available file="${xcode}/Developer/SDKs/MacOSX10.8.sdk"/>
</and>
</condition>
<condition property="make.SDKROOT"
value="SDKROOT=/Developer/SDKs/MacOSX10.6.sdk">
<and>
@@ -760,6 +794,20 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
</copy>
</target>
<target name="compile-some-tests" depends="compile,jar"
description="Compile test code which does not have additional native
dependencies">
<javac classpathref="compile-test.path"
source="${test.compatibility}"
target="${test.compatibility}"
destdir="${test.classes}"
includeantruntime="false"
includes="**/StructureFieldOrderInspector.java"
deprecation="on" debug="${debug}">
<src path="${test.src}"/>
</javac>
</target>
<target name="compile-tests" depends="compile,native,jar"
description="Compile all test code">
<javac classpathref="compile-test.path"
@@ -906,7 +954,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
<fail if="testfailure" unless="clover">One or more tests failed</fail>
</target>
<target name="test-platform" depends="compile-tests,platform-jar">
<target name="test-platform" depends="compile-some-tests,platform-jar">
<subant target="test" failonerror="true" inheritall="true" inheritrefs="true">
<property name="file.reference.jna.build" location="${build}"/>
<property name="file.reference.jna.jar" location="${build}/${jar}"/>
@@ -72,7 +72,7 @@ import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinGDI.BITMAPINFO;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinUser.BLENDFUNCTION;
import com.sun.jna.platform.win32.WinUser.POINT;
import com.sun.jna.platform.win32.WinDef.POINT;
import com.sun.jna.platform.win32.WinUser.SIZE;
import com.sun.jna.ptr.PointerByReference;
@@ -438,7 +438,7 @@ public class AlphaMaskDemo implements Runnable {
if (flavor != null) {
Reader reader = flavor.getReaderForText(t);
char[] buf = new char[512];
StringBuffer b = new StringBuffer();
StringBuilder b = new StringBuilder();
int count;
// excise excess NUL characters (bug in firefox, java
// or my code, not sure which). someone got the
@@ -200,7 +200,7 @@ public class AlphaMaskDemo2 implements Runnable {
if (flavor != null) {
Reader reader = flavor.getReaderForText(t);
char[] buf = new char[512];
StringBuffer b = new StringBuffer();
StringBuilder b = new StringBuilder();
int count;
// excise excess NUL characters (bug in firefox,
// java
@@ -256,8 +256,8 @@ public class FilteredTextField extends JTextField {
balloon.hide();
}
}
StringBuffer buffer =
new StringBuffer(FilteredTextField.this.getText());
StringBuilder buffer =
new StringBuilder(FilteredTextField.this.getText());
if (offset >= 0 && offset <= buffer.length()) {
buffer.insert(offset, str);
String strBuf = buffer.toString();
@@ -0,0 +1,206 @@
/*
* Copyright 2014 Martin Steiger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jna.contrib.demo;
import com.sun.jna.Memory;
import com.sun.jna.platform.EnumUtils;
import com.sun.jna.platform.win32.Dxva2;
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI;
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_COLOR_TEMPERATURE;
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_DISPLAY_TECHNOLOGY_TYPE;
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_DRIVE_TYPE;
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_GAIN_TYPE;
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_POSITION_TYPE;
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_SIZE_TYPE;
import com.sun.jna.platform.win32.LowLevelMonitorConfigurationAPI.MC_TIMING_REPORT;
import com.sun.jna.platform.win32.PhysicalMonitorEnumerationAPI.PHYSICAL_MONITOR;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WTypes.LPSTR;
import com.sun.jna.platform.win32.WinDef.DWORD;
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
import com.sun.jna.platform.win32.WinDef.HDC;
import com.sun.jna.platform.win32.WinDef.LPARAM;
import com.sun.jna.platform.win32.WinDef.RECT;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.platform.win32.WinUser.HMONITOR;
import com.sun.jna.platform.win32.WinUser.MONITORENUMPROC;
import com.sun.jna.platform.win32.WinUser.MONITORINFOEX;
/**
* A small demo that tests the Win32 monitor API.
* All available physical and virtual monitors are enumerated and
* their capabilities printed to stdout
* @author Martin Steiger
*/
public class MonitorInfoDemo
{
/**
* @param args (ignored)
*/
public static void main(String[] args)
{
System.out.println("Installed Physical Monitors: " + User32.INSTANCE.GetSystemMetrics(WinUser.SM_CMONITORS));
User32.INSTANCE.EnumDisplayMonitors(null, null, new MONITORENUMPROC() {
@Override
public int apply(HMONITOR hMonitor, HDC hdc, RECT rect, LPARAM lparam)
{
enumerate(hMonitor);
return 1;
}
}, new LPARAM(0));
}
static void enumerate(HMONITOR hMonitor)
{
System.out.println("Found HMONITOR: " + hMonitor.getPointer().toString());
MONITORINFOEX info = new MONITORINFOEX();
User32.INSTANCE.GetMonitorInfo(hMonitor, info);
System.out.println("Screen " + info.rcMonitor);
System.out.println("Work area " + info.rcWork);
boolean isPrimary = (info.dwFlags & WinUser.MONITORINFOF_PRIMARY) != 0;
System.out.println("Primary? " + (isPrimary ? "yes" : "no"));
System.out.println("Device " + new String(info.szDevice));
DWORDByReference pdwNumberOfPhysicalMonitors = new DWORDByReference();
Dxva2.INSTANCE.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, pdwNumberOfPhysicalMonitors);
int monitorCount = pdwNumberOfPhysicalMonitors.getValue().intValue();
System.out.println("HMONITOR is linked to " + monitorCount + " physical monitors");
PHYSICAL_MONITOR[] physMons = new PHYSICAL_MONITOR[monitorCount];
Dxva2.INSTANCE.GetPhysicalMonitorsFromHMONITOR(hMonitor, monitorCount, physMons);
for (int i = 0; i < monitorCount; i++)
{
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
System.out.println("Monitor " + i + " - " + new String(physMons[i].szPhysicalMonitorDescription));
enumeratePhysicalMonitor(hPhysicalMonitor);
}
Dxva2.INSTANCE.DestroyPhysicalMonitors(monitorCount, physMons);
}
/**
* @param hPhysicalMonitor
*/
private static void enumeratePhysicalMonitor(HANDLE hPhysicalMonitor)
{
MC_DISPLAY_TECHNOLOGY_TYPE.ByReference techType = new MC_DISPLAY_TECHNOLOGY_TYPE.ByReference();
Dxva2.INSTANCE.GetMonitorTechnologyType(hPhysicalMonitor, techType);
System.out.println("TECHTYPE: " + techType.getValue());
DWORDByReference temps = new DWORDByReference();
DWORDByReference caps = new DWORDByReference();
Dxva2.INSTANCE.GetMonitorCapabilities(hPhysicalMonitor, caps, temps);
System.out.println("CAPS " + EnumUtils.setFromInteger(caps.getValue().intValue(), HighLevelMonitorConfigurationAPI.MC_CAPS.class));
System.out.println("Temps " + temps.getValue());
// Brightness
DWORDByReference pdwMinimumBrightness = new DWORDByReference();
DWORDByReference pdwCurrentBrightness = new DWORDByReference();
DWORDByReference pdwMaximumBrightness = new DWORDByReference();
Dxva2.INSTANCE.GetMonitorBrightness(hPhysicalMonitor, pdwMinimumBrightness, pdwCurrentBrightness, pdwMaximumBrightness);
System.out.println("Brightness Min: " + pdwMinimumBrightness.getValue());
System.out.println("Brightness Current: " + pdwCurrentBrightness.getValue());
System.out.println("Brightness Max: " + pdwMaximumBrightness.getValue());
// Contrast
DWORDByReference pdwMinimumContrast = new DWORDByReference();
DWORDByReference pdwCurrentContrast = new DWORDByReference();
DWORDByReference pdwMaximumContrast = new DWORDByReference();
Dxva2.INSTANCE.GetMonitorContrast(hPhysicalMonitor, pdwMinimumContrast, pdwCurrentContrast, pdwMaximumContrast);
System.out.println("Contrast Min: " + pdwMinimumContrast.getValue());
System.out.println("Contrast Current: " + pdwCurrentContrast.getValue());
System.out.println("Contrast Max: " + pdwMaximumContrast.getValue());
// Temperature
MC_COLOR_TEMPERATURE.ByReference pctCurrentColorTemperature = new MC_COLOR_TEMPERATURE.ByReference();
Dxva2.INSTANCE.GetMonitorColorTemperature(hPhysicalMonitor, pctCurrentColorTemperature);
System.out.println("Current Temp: " + pctCurrentColorTemperature.getValue());
// Capabilities string
DWORDByReference pdwCapabilitiesStringLengthInCharacters = new DWORDByReference();
Dxva2.INSTANCE.GetCapabilitiesStringLength(hPhysicalMonitor, pdwCapabilitiesStringLengthInCharacters);
DWORD capStrLen = pdwCapabilitiesStringLengthInCharacters.getValue();
LPSTR pszASCIICapabilitiesString = new LPSTR(new Memory(capStrLen.intValue()));
Dxva2.INSTANCE.CapabilitiesRequestAndCapabilitiesReply(hPhysicalMonitor, pszASCIICapabilitiesString, capStrLen);
System.out.println("Cap-String:" + new String(pszASCIICapabilitiesString.getPointer().getString(0)));
// Position
MC_POSITION_TYPE ptPositionType = MC_POSITION_TYPE.MC_HORIZONTAL_POSITION;
DWORDByReference pdwMinimumPosition = new DWORDByReference();
DWORDByReference pdwCurrentPosition = new DWORDByReference();
DWORDByReference pdwMaximumPosition = new DWORDByReference();
Dxva2.INSTANCE.GetMonitorDisplayAreaPosition(hPhysicalMonitor, ptPositionType, pdwMinimumPosition, pdwCurrentPosition, pdwMaximumPosition);
System.out.println("Position (horz) Min: " + pdwMinimumPosition.getValue());
System.out.println("Position (horz) Current: " + pdwCurrentPosition.getValue());
System.out.println("Position (horz) Max: " + pdwMaximumPosition.getValue());
// Size
MC_SIZE_TYPE ptSizeType = MC_SIZE_TYPE.MC_WIDTH;
DWORDByReference pdwMinimumSize = new DWORDByReference();
DWORDByReference pdwCurrentSize = new DWORDByReference();
DWORDByReference pdwMaximumSize = new DWORDByReference();
Dxva2.INSTANCE.GetMonitorDisplayAreaSize(hPhysicalMonitor, ptSizeType, pdwMinimumSize, pdwCurrentSize, pdwMaximumSize);
System.out.println("Width Min: " + pdwMinimumSize.getValue());
System.out.println("Width Current: " + pdwCurrentSize.getValue());
System.out.println("Width Max: " + pdwMaximumSize.getValue());
// Gain
MC_GAIN_TYPE ptGainType = MC_GAIN_TYPE.MC_RED_GAIN;
DWORDByReference pdwMinimumGain = new DWORDByReference();
DWORDByReference pdwCurrentGain = new DWORDByReference();
DWORDByReference pdwMaximumGain = new DWORDByReference();
Dxva2.INSTANCE.GetMonitorRedGreenOrBlueGain(hPhysicalMonitor, ptGainType, pdwMinimumGain, pdwCurrentGain, pdwMaximumGain);
System.out.println("Red Gain Min: " + pdwMinimumSize.getValue());
System.out.println("Red Gain Current: " + pdwCurrentSize.getValue());
System.out.println("Red Gain Max: " + pdwMaximumSize.getValue());
// Drive
MC_DRIVE_TYPE ptDriveType = MC_DRIVE_TYPE.MC_RED_DRIVE;
DWORDByReference pdwMinimumDrive = new DWORDByReference();
DWORDByReference pdwCurrentDrive = new DWORDByReference();
DWORDByReference pdwMaximumDrive = new DWORDByReference();
Dxva2.INSTANCE.GetMonitorRedGreenOrBlueDrive(hPhysicalMonitor, ptDriveType, pdwMinimumDrive, pdwCurrentDrive, pdwMaximumDrive);
System.out.println("Red Drive Min: " + pdwMinimumSize.getValue());
System.out.println("Red Drive Current: " + pdwCurrentSize.getValue());
System.out.println("Red Drive Max: " + pdwMaximumSize.getValue());
// Timing Report
MC_TIMING_REPORT pmtrMonitorTimingReport = new MC_TIMING_REPORT();
Dxva2.INSTANCE.GetTimingReport(hPhysicalMonitor, pmtrMonitorTimingReport);
System.out.println("HorizontalFrequencyInHZ " + pmtrMonitorTimingReport.dwHorizontalFrequencyInHZ);
System.out.println("VerticalFrequencyInHZ " + pmtrMonitorTimingReport.dwVerticalFrequencyInHZ);
System.out.println("--------------------------------------");
}
}
+1 -1
Ver Arquivo
@@ -3,6 +3,6 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry combineaccessrules="false" kind="src" path="/jnalib"/>
<classpathentry kind="lib" path="C:/GitHub/jna-3.5.1.jar"/>
<classpathentry kind="var" path="JNA_LIB"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -1,2 +0,0 @@
eclipse.preferences.version=1
encoding//src/com/sun/jna/platform/win32/office/MSWord.java=UTF-8
Arquivo binário não exibido.
Arquivo binário não exibido.
@@ -1,4 +1,4 @@
package com.sun.jna.platform.win32.office;
package com.sun.jna.platform.win32.COM;
import java.io.FileWriter;
import java.io.IOException;
@@ -10,10 +10,11 @@ import com.sun.jna.platform.win32.COM.COMUtils.COMInfo;
public class COMInfoUtil {
public static void main(String[] args) {
FileWriter writer = null;
try {
String filename = "C:\\TEMP\\CLSIDs.txt";
ArrayList<COMInfo> comInfos = COMUtils.getAllCOMInfoOnSystem();
FileWriter writer = new FileWriter(filename);
writer = new FileWriter(filename);
for (COMInfo comInfo : comInfos) {
String result = "CLSID: " + comInfo.clsid + "\n";
@@ -31,6 +32,12 @@ public class COMInfoUtil {
+ comInfos.size());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@@ -0,0 +1,97 @@
package com.sun.jna.platform.win32.COM.office;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.COM.COMException;
import com.sun.jna.platform.win32.COM.COMLateBindingObject;
import com.sun.jna.platform.win32.COM.IDispatch;
public class MSExcel extends COMLateBindingObject {
public MSExcel() throws COMException {
super("Excel.Application", false);
}
public MSExcel(boolean visible) throws COMException {
this();
this.setVisible(visible);
}
public void setVisible(boolean bVisible) throws COMException {
this.setProperty("Visible", bVisible);
}
public String getVersion() throws COMException {
return this.getStringProperty("Version");
}
public void newExcelBook() throws COMException {
this.invokeNoReply("Add", getWorkbooks());
}
public void openExcelBook(String filename, boolean bVisible)
throws COMException {
// OpenDocument
this.invokeNoReply("Open", getWorkbooks(), new VARIANT(filename));
}
public void closeActiveWorkbook(boolean bSave) throws COMException {
this.invokeNoReply("Close", getActiveWorkbook(), new VARIANT(bSave));
}
public void quit() throws COMException {
this.invokeNoReply("Quit");
}
public void insertValue(String range, String value) throws COMException {
Range pRange = new Range(this.getAutomationProperty("Range",
this.getActiveSheet(), new VARIANT(range)));
this.setProperty("Value", pRange, new VARIANT(value));
}
public Application getApplication() {
return new Application(this.getAutomationProperty("Application"));
}
public ActiveWorkbook getActiveWorkbook() {
return new ActiveWorkbook(this.getAutomationProperty("ActiveWorkbook"));
}
public Workbooks getWorkbooks() {
return new Workbooks(this.getAutomationProperty("WorkBooks"));
}
public ActiveSheet getActiveSheet() {
return new ActiveSheet(this.getAutomationProperty("ActiveSheet"));
}
public class Application extends COMLateBindingObject {
public Application(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class Workbooks extends COMLateBindingObject {
public Workbooks(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class ActiveWorkbook extends COMLateBindingObject {
public ActiveWorkbook(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class ActiveSheet extends COMLateBindingObject {
public ActiveSheet(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class Range extends COMLateBindingObject {
public Range(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
}
@@ -0,0 +1,123 @@
package com.sun.jna.platform.win32.COM.office;
import java.io.File;
import com.sun.jna.platform.win32.COM.COMException;
import com.sun.jna.platform.win32.WinDef.LONG;
public class MSOfficeDemo {
/**
* @param args
*/
public static void main(String[] args) {
new MSOfficeDemo();
}
private String currentWorkingDir = new File("").getAbsolutePath()
+ File.separator;
public MSOfficeDemo() {
this.testMSWord();
// this.testMSExcel();
}
public void testMSWord() {
MSWord msWord = null;
// http://msdn.microsoft.com/en-us/library/office/ff839952(v=office.15).aspx
LONG wdFormatPDF = new LONG(17); // PDF format.
LONG wdFormatRTF = new LONG(6); // Rich text format (RTF).
LONG wdFormatHTML = new LONG(8); // Standard HTML format.
LONG wdFormatDocument = new LONG(0); // Microsoft Office Word 97 - 2003 binary file format.
LONG wdFormatDocumentDefault = new LONG(16); // Word default document file format. For Word 2010, this is the DOCX format.
// http://msdn.microsoft.com/en-us/library/office/ff838709(v=office.15).aspx
LONG wdOriginalDocumentFormat = new LONG(1); // Original document format.
LONG wdPromptUser = new LONG(2); // Prompt user to select a document format.
LONG wdWordDocument = new LONG(0); // Microsoft Word document format.
try {
msWord = new MSWord();
System.out.println("MSWord version: " + msWord.getVersion());
msWord.setVisible(true);
// msWord.newDocument();
msWord.openDocument(currentWorkingDir + "jnatest.doc", true);
msWord.insertText("Hello from JNA! \n\n");
// wait 10sec. before closing
Thread.currentThread().sleep(1000);
// save in different formats
// pdf format is only supported in MSWord 2007 and above
msWord.SaveAs("C:\\TEMP\\jnatestSaveAs.doc", wdFormatDocument);
msWord.SaveAs("C:\\TEMP\\jnatestSaveAs.pdf", wdFormatPDF);
msWord.SaveAs("C:\\TEMP\\jnatestSaveAs.rtf", wdFormatRTF);
msWord.SaveAs("C:\\TEMP\\jnatestSaveAs.html", wdFormatHTML);
// close and save the document
msWord.closeActiveDocument(false);
msWord.newDocument();
// msWord.openDocument(currentWorkingDir + "jnatest.doc", true);
msWord.insertText("Hello from JNA! \n Please notice that JNA can control MS Word via the new COM interface! \nHere we are creating a new word document and we save it to the 'TEMP' directory!");
// save with no user prompt
msWord.SaveAs("C:\\TEMP\\jnatestNewDoc1.docx", wdFormatDocumentDefault);
msWord.SaveAs("C:\\TEMP\\jnatestNewDoc2.docx", wdFormatDocumentDefault);
msWord.SaveAs("C:\\TEMP\\jnatestNewDoc3.docx", wdFormatDocumentDefault);
// close and save the document
msWord.closeActiveDocument(false);
// open 3 documents
msWord.openDocument("C:\\TEMP\\jnatestNewDoc1.docx", true);
msWord.insertText("Hello some changes from JNA!\n");
msWord.openDocument("C:\\TEMP\\jnatestNewDoc2.docx", true);
msWord.insertText("Hello some changes from JNA!\n");
msWord.openDocument("C:\\TEMP\\jnatestNewDoc3.docx", true);
msWord.insertText("Hello some changes from JNA!\n");
// save the document and prompt the user
msWord.Save(false, wdPromptUser);
// wait then close word
msWord.quit();
} catch(InterruptedException ie) {
ie.printStackTrace();
} catch (COMException e) {
if (e.getExcepInfo() != null) {
System.out
.println("bstrSource: " + e.getExcepInfo().bstrSource);
System.out.println("bstrDescription: "
+ e.getExcepInfo().bstrDescription);
}
// print stack trace
e.printStackTrace();
if (msWord != null)
msWord.quit();
}
}
public void testMSExcel() {
MSExcel msExcel = null;
try {
msExcel = new MSExcel();
System.out.println("MSExcel version: " + msExcel.getVersion());
msExcel.setVisible(true);
// msExcel.newExcelBook();
msExcel.openExcelBook(currentWorkingDir + "jnatest.xls", true);
msExcel.insertValue("A1", "Hello from JNA!");
// wait 10sec. before closing
Thread.currentThread().sleep(10000);
// close and save the active sheet
msExcel.closeActiveWorkbook(true);
msExcel.setVisible(true);
// msExcel.newExcelBook();
msExcel.openExcelBook(currentWorkingDir + "jnatest.xls", true);
msExcel.insertValue("A1", "Hello from JNA!");
// close and save the active sheet
msExcel.closeActiveWorkbook(true);
} catch (Exception e) {
e.printStackTrace();
if (msExcel != null)
msExcel.quit();
}
}
}
@@ -0,0 +1,107 @@
package com.sun.jna.platform.win32.COM.office;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.COM.COMException;
import com.sun.jna.platform.win32.COM.COMLateBindingObject;
import com.sun.jna.platform.win32.COM.IDispatch;
import com.sun.jna.platform.win32.WinDef.LONG;
public class MSWord extends COMLateBindingObject {
public MSWord() throws COMException {
super("Word.Application", false);
}
public MSWord(boolean visible) throws COMException {
this();
this.setVisible(visible);
}
public void setVisible(boolean bVisible) throws COMException {
this.setProperty("Visible", bVisible);
}
public String getVersion() throws COMException {
return this.getStringProperty("Version");
}
public void newDocument() throws COMException {
this.invokeNoReply("Add", getDocuments());
}
public void openDocument(String filename, boolean bVisible)
throws COMException {
// OpenDocument
this.invokeNoReply("Open", getDocuments(), new VARIANT(filename));
}
public void closeActiveDocument(boolean bSave) throws COMException {
this.invokeNoReply("Close", getActiveDocument(), new VARIANT(bSave));
}
public void quit() throws COMException {
this.invokeNoReply("Quit");
}
public void insertText(String text) throws COMException {
Selection pSelection = new Selection(this.getAutomationProperty(
"Selection", this.getIDispatch()));
this.invokeNoReply("TypeText", pSelection, new VARIANT(text));
}
public void Save(boolean bNoPrompt, LONG originalFormat) throws COMException {
VARIANT vtNoPrompt = new VARIANT(bNoPrompt);
VARIANT vtOriginalFormat = new VARIANT(originalFormat);
this.invokeNoReply("Save", this.getDocuments(),
vtNoPrompt, vtOriginalFormat);
}
public void SaveAs(String FileName, LONG FileFormat) throws COMException {
VARIANT vtFileName = new VARIANT(FileName);
VARIANT vtFileFormat = new VARIANT(FileFormat);
this.invokeNoReply("SaveAs", this.getActiveDocument(),
vtFileName, vtFileFormat);
}
public ActiveDocument getActiveDocument() {
return new ActiveDocument(this.getAutomationProperty("ActiveDocument"));
}
public Documents getDocuments() {
// GetDocuments
Documents pDocuments = new Documents(this.getAutomationProperty(
"Documents", this.getApplication().getIDispatch()));
return pDocuments;
}
public Application getApplication() {
return new Application(this.getAutomationProperty("Application"));
}
public class Application extends COMLateBindingObject {
public Application(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class Documents extends COMLateBindingObject {
public Documents(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class ActiveDocument extends COMLateBindingObject {
public ActiveDocument(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class Selection extends COMLateBindingObject {
public Selection(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
}
@@ -1,162 +0,0 @@
package com.sun.jna.platform.win32.office;
import com.sun.jna.platform.win32.OaIdl.VARIANT_BOOL;
import com.sun.jna.platform.win32.OleAuto;
import com.sun.jna.platform.win32.Variant;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.platform.win32.COM.COMException;
import com.sun.jna.platform.win32.COM.COMObject;
import com.sun.jna.platform.win32.COM.COMUtils;
import com.sun.jna.platform.win32.COM.IDispatch;
public class MSExcel extends COMObject {
public MSExcel() throws COMException {
super("Excel.Application", false);
}
public MSExcel(boolean visible) throws COMException {
this();
this.setVisible(Variant.VARIANT_TRUE);
}
public void setVisible(VARIANT_BOOL bVisible) throws COMException {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, result, this.iDispatch,
"Visible", new VARIANT(bVisible));
}
public String getVersion() throws COMException {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
"Version");
return result.getValue().toString();
}
public HRESULT newExcelBook() throws COMException {
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null, getWorkbooks()
.getIDispatch(), "Add");
return hr;
}
public HRESULT openExcelBook(String filename, boolean bVisible)
throws COMException {
// OpenDocument
BSTR bstrFilename = OleAuto.INSTANCE.SysAllocString(filename);
VARIANT varFilename = new VARIANT(bstrFilename);
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null, getWorkbooks()
.getIDispatch(), "Open", varFilename);
return hr;
}
public HRESULT closeActiveWorkbook(VARIANT_BOOL bSave) throws COMException {
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
getActiveWorkbook().getIDispatch(), "Close", new VARIANT(bSave));
return hr;
}
public HRESULT quit() throws COMException {
HRESULT hr = this.oleMethod(OleAuto.DISPATCH_METHOD, null,
this.iDispatch, "Quit");
COMUtils.SUCCEEDED(hr);
return hr;
}
public HRESULT insertValue(String range, String value) throws COMException {
HRESULT hr;
BSTR bstrRange = OleAuto.INSTANCE.SysAllocString(range);
VARIANT varRange = new VARIANT(bstrRange);
VARIANT.ByReference result = new VARIANT.ByReference();
hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this
.getActiveSheet().getIDispatch(), "Range", varRange);
Range pRange = new Range((IDispatch) result.getValue());
BSTR bstrValue = OleAuto.INSTANCE.SysAllocString(value);
VARIANT varText = new VARIANT(bstrValue);
hr = oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null,
pRange.getIDispatch(), "Value", varText);
return hr;
}
public Application getApplication() {
VARIANT.ByReference result = new VARIANT.ByReference();
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.iDispatch, "Application");
COMUtils.SUCCEEDED(hr);
return new Application((IDispatch) result.getValue());
}
public ActiveWorkbook getActiveWorkbook() {
VARIANT.ByReference result = new VARIANT.ByReference();
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.iDispatch, "ActiveWorkbook");
COMUtils.SUCCEEDED(hr);
return new ActiveWorkbook((IDispatch) result.getValue());
}
public Workbooks getWorkbooks() {
// GetDocuments
VARIANT.ByReference result = new VARIANT.ByReference();
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.iDispatch, "WorkBooks");
COMUtils.SUCCEEDED(hr);
return new Workbooks((IDispatch) result.getValue());
}
public ActiveSheet getActiveSheet() {
VARIANT.ByReference result = new VARIANT.ByReference();
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.iDispatch, "ActiveSheet");
COMUtils.SUCCEEDED(hr);
return new ActiveSheet((IDispatch) result.getValue());
}
public class Application extends COMObject {
public Application(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class Workbooks extends COMObject {
public Workbooks(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class ActiveWorkbook extends COMObject {
public ActiveWorkbook(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class ActiveSheet extends COMObject {
public ActiveSheet(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class Range extends COMObject {
public Range(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
}
@@ -1,80 +0,0 @@
package com.sun.jna.platform.win32.office;
import java.io.File;
import com.sun.jna.platform.win32.Variant;
import com.sun.jna.platform.win32.COM.COMException;
public class MSOfficeDemo {
/**
* @param args
*/
public static void main(String[] args) {
new MSOfficeDemo();
}
private String currentWorkingDir = new File("").getAbsolutePath()
+ File.separator;
public MSOfficeDemo() {
//this.testMSWord();
this.testMSExcel();
}
public void testMSWord() {
MSWord msWord = null;
try {
msWord = new MSWord();
System.out.println("MSWord version: " + msWord.getVersion());
msWord.setVisible(Variant.VARIANT_TRUE);
msWord.newDocument();
//msWord.openDocument(currentWorkingDir + "jnatest.doc", true);
msWord.insertText("Hello from JNA!");
// close and save the document
msWord.closeActiveDocument(Variant.VARIANT_TRUE);
// wait then close word
msWord.quit();
} catch (COMException e) {
if (e.getExcepInfo() != null) {
System.out
.println("bstrSource: " + e.getExcepInfo().bstrSource);
System.out.println("bstrDescription: "
+ e.getExcepInfo().bstrDescription);
} else
e.printStackTrace();
if(msWord != null)
msWord.quit();
}
}
public void testMSExcel() {
MSExcel msExcel = null;
try {
msExcel = new MSExcel();
System.out.println("MSExcel version: " + msExcel.getVersion());
msExcel.setVisible(Variant.VARIANT_TRUE);
//msExcel.newExcelBook();
msExcel.openExcelBook(currentWorkingDir + "jnatest.xls", true);
msExcel.insertValue("A1", "Hello from JNA!");
// close and save the active sheet
msExcel.closeActiveWorkbook(Variant.VARIANT_TRUE);
// wait then close excel
msExcel.quit();
} catch (COMException e) {
if (e.getExcepInfo() != null) {
System.out
.println("bstrSource: " + e.getExcepInfo().bstrSource);
System.out.println("bstrDescription: "
+ e.getExcepInfo().bstrDescription);
} else
e.printStackTrace();
if(msExcel != null)
msExcel.quit();
}
}
}
@@ -1,145 +0,0 @@
package com.sun.jna.platform.win32.office;
import com.sun.jna.platform.win32.OaIdl.VARIANT_BOOL;
import com.sun.jna.platform.win32.OleAuto;
import com.sun.jna.platform.win32.Variant;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.platform.win32.COM.COMException;
import com.sun.jna.platform.win32.COM.COMObject;
import com.sun.jna.platform.win32.COM.COMUtils;
import com.sun.jna.platform.win32.COM.IDispatch;
public class MSWord extends COMObject {
public MSWord() throws COMException {
super("Word.Application", false);
}
public MSWord(boolean visible) throws COMException {
this();
this.setVisible(Variant.VARIANT_TRUE);
}
public void setVisible(VARIANT_BOOL bVisible) throws COMException {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, result, this.iDispatch,
"Visible", new VARIANT(bVisible));
}
public String getVersion() throws COMException {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
"Version");
return result.getValue().toString();
}
public HRESULT newDocument() throws COMException {
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
getDocuments().getIDispatch(), "Add");
return hr;
}
public HRESULT openDocument(String filename, boolean bVisible)
throws COMException {
// OpenDocument
BSTR bstrFilename = OleAuto.INSTANCE.SysAllocString(filename);
VARIANT varFilename = new VARIANT(bstrFilename);
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
getDocuments().getIDispatch(), "Open", varFilename);
return hr;
}
public HRESULT closeActiveDocument(VARIANT_BOOL bSave)
throws COMException {
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
getActiveDocument().getIDispatch(), "Close", new VARIANT(bSave));
return hr;
}
public HRESULT quit() throws COMException {
HRESULT hr = this.oleMethod(OleAuto.DISPATCH_METHOD, null,
this.iDispatch, "Quit");
COMUtils.SUCCEEDED(hr);
return hr;
}
public HRESULT insertText(String text) throws COMException {
HRESULT hr;
VARIANT.ByReference result = new VARIANT.ByReference();
hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.iDispatch, "Selection");
Selection pSelection = new Selection((IDispatch) result.getValue());
BSTR bstrText = OleAuto.INSTANCE.SysAllocString(text);
VARIANT varText = new VARIANT(bstrText);
hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
pSelection.getIDispatch(), "TypeText", varText);
return hr;
}
public ActiveDocument getActiveDocument() {
VARIANT.ByReference result = new VARIANT.ByReference();
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
"ActiveDocument");
COMUtils.SUCCEEDED(hr);
return new ActiveDocument((IDispatch) result.getValue());
}
public Documents getDocuments() {
// GetDocuments
VARIANT.ByReference result = new VARIANT.ByReference();
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
"Documents");
COMUtils.SUCCEEDED(hr);
return new Documents((IDispatch) result.getValue());
}
public Application getApplication() {
VARIANT.ByReference result = new VARIANT.ByReference();
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
"Application");
COMUtils.SUCCEEDED(hr);
return new Application((IDispatch) result.getValue());
}
public class Application extends COMObject {
public Application(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class Documents extends COMObject {
public Documents(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class ActiveDocument extends COMObject {
public ActiveDocument(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
public class Selection extends COMObject {
public Selection(IDispatch iDispatch) throws COMException {
super(iDispatch);
}
}
}
@@ -16,6 +16,11 @@ package com.sun.jna.platform.win32;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.DBT;
import com.sun.jna.platform.win32.DBT.DEV_BROADCAST_DEVICEINTERFACE;
import com.sun.jna.platform.win32.DBT.DEV_BROADCAST_HANDLE;
import com.sun.jna.platform.win32.DBT.DEV_BROADCAST_HDR;
import com.sun.jna.platform.win32.DBT.DEV_BROADCAST_OEM;
import com.sun.jna.platform.win32.DBT.DEV_BROADCAST_PORT;
import com.sun.jna.platform.win32.DBT.DEV_BROADCAST_VOLUME;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HMODULE;
@@ -59,7 +64,9 @@ public class Win32WindowDemo implements WindowProc {
User32.WS_EX_TOPMOST,
windowClass,
"My hidden helper window, used only to catch the windows events",
0, 0, 0, 0, 0, WinUser.HWND_MESSAGE, null, hInst, null);
0, 0, 0, 0, 0,
null, // WM_DEVICECHANGE contradicts parent=WinUser.HWND_MESSAGE
null, hInst, null);
getLastError();
System.out.println("window sucessfully created! window hwnd: "
@@ -74,6 +81,7 @@ public class Win32WindowDemo implements WindowProc {
/* this filters for all usb device classes */
DEV_BROADCAST_DEVICEINTERFACE notificationFilter = new DEV_BROADCAST_DEVICEINTERFACE();
notificationFilter.dbcc_size = notificationFilter.size();
notificationFilter.dbcc_devicetype = DBT.DBT_DEVTYP_DEVICEINTERFACE;
notificationFilter.dbcc_classguid = DBT.GUID_DEVINTERFACE_USB_DEVICE;
@@ -125,8 +133,9 @@ public class Win32WindowDemo implements WindowProc {
return new LRESULT(0);
}
case WinUser.WM_DEVICECHANGE: {
this.onDeviceChange(wParam, lParam);
return new LRESULT(0);
LRESULT lResult = this.onDeviceChange(wParam, lParam);
return lResult != null ? lResult :
User32.INSTANCE.DefWindowProc(hwnd, uMsg, wParam, lParam);
}
default:
return User32.INSTANCE.DefWindowProc(hwnd, uMsg, wParam, lParam);
@@ -251,42 +260,101 @@ public class Win32WindowDemo implements WindowProc {
* the w param
* @param lParam
* the l param
* @return the result. Null if the message is not processed.
*/
protected void onDeviceChange(WPARAM wParam, LPARAM lParam) {
//
// This is the actual message from the interface via Windows messaging.
// This code includes some additional decoding for this particular
// device type
// and some common validation checks.
//
// Note that not all devices utilize these optional parameters in the
// same
// way. Refer to the extended information for your particular device
// type
// specified by your GUID.
//
DEV_BROADCAST_DEVICEINTERFACE bdif = new DEV_BROADCAST_DEVICEINTERFACE(
lParam.longValue());
System.out.println("dbcc_devicetype: " + bdif.dbcc_devicetype);
System.out.println("dbcc_name: " + bdif.getDbcc_name());
System.out.println("dbcc_classguid: "
+ bdif.dbcc_classguid.toGuidString());
// Output some messages to the window.
protected LRESULT onDeviceChange(WPARAM wParam, LPARAM lParam) {
switch (wParam.intValue()) {
case DBT.DBT_DEVICEARRIVAL:
System.out.println("Message DBT_DEVICEARRIVAL");
break;
case DBT.DBT_DEVICEREMOVECOMPLETE:
System.out.println("Message DBT_DEVICEREMOVECOMPLETE");
break;
case DBT.DBT_DEVNODES_CHANGED:
System.out.println("Message DBT_DEVNODES_CHANGED");
break;
case DBT.DBT_DEVICEARRIVAL: {
return onDeviceChangeArrival(lParam);
}
case DBT.DBT_DEVICEREMOVECOMPLETE: {
return onDeviceChangeRemoveComplete(lParam);
}
case DBT.DBT_DEVNODES_CHANGED: {
//lParam is 0 for this wParam
return onDeviceChangeNodesChanged();
}
default:
System.out
.println("Message WM_DEVICECHANGE message received, value unhandled.");
}
return null;
}
protected LRESULT onDeviceChangeArrivalOrRemoveComplete(LPARAM lParam, String action) {
DEV_BROADCAST_HDR bhdr = new DEV_BROADCAST_HDR(lParam.longValue());
switch (bhdr.dbch_devicetype) {
case DBT.DBT_DEVTYP_DEVICEINTERFACE: {
// see http://msdn.microsoft.com/en-us/library/windows/desktop/aa363244.aspx
DEV_BROADCAST_DEVICEINTERFACE bdif = new DEV_BROADCAST_DEVICEINTERFACE(bhdr.getPointer());
System.out.println("BROADCAST_DEVICEINTERFACE: " + action);
System.out.println("dbcc_devicetype: " + bdif.dbcc_devicetype);
System.out.println("dbcc_name: " + bdif.getDbcc_name());
System.out.println("dbcc_classguid: "
+ bdif.dbcc_classguid.toGuidString());
break;
}
case DBT.DBT_DEVTYP_HANDLE: {
// see http://msdn.microsoft.com/en-us/library/windows/desktop/aa363245.aspx
DEV_BROADCAST_HANDLE bhd = new DEV_BROADCAST_HANDLE(bhdr.getPointer());
System.out.println("BROADCAST_HANDLE: " + action);
break;
}
case DBT.DBT_DEVTYP_OEM: {
// see http://msdn.microsoft.com/en-us/library/windows/desktop/aa363247.aspx
DEV_BROADCAST_OEM boem = new DEV_BROADCAST_OEM(bhdr.getPointer());
System.out.println("BROADCAST_OEM: " + action);
break;
}
case DBT.DBT_DEVTYP_PORT: {
// see http://msdn.microsoft.com/en-us/library/windows/desktop/aa363248.aspx
DEV_BROADCAST_PORT bpt = new DEV_BROADCAST_PORT(bhdr.getPointer());
System.out.println("BROADCAST_PORT: " + action);
break;
}
case DBT.DBT_DEVTYP_VOLUME: {
// see http://msdn.microsoft.com/en-us/library/windows/desktop/aa363249.aspx
DEV_BROADCAST_VOLUME bvl = new DEV_BROADCAST_VOLUME(bhdr.getPointer());
int logicalDriveAffected = bvl.dbcv_unitmask;
short flag = bvl.dbcv_flags;
boolean isMediaNotPhysical = 0 != (flag & DBT.DBTF_MEDIA/*value is 1*/);
boolean isNet = 0 != (flag & DBT.DBTF_NET/*value is 2*/);
System.out.println(action);
int driveLetterIndex = 0;
while (logicalDriveAffected != 0) {
if (0 != (logicalDriveAffected & 1)) {
System.out.println("Logical Drive Letter: " +
((char) ('A' + driveLetterIndex)));
}
logicalDriveAffected >>>= 1;
driveLetterIndex++;
}
System.out.println("isMediaNotPhysical:"+isMediaNotPhysical);
System.out.println("isNet:"+isNet);
break;
}
default:
return null;
}
// return TRUE means processed message for this wParam.
// see http://msdn.microsoft.com/en-us/library/windows/desktop/aa363205.aspx
// see http://msdn.microsoft.com/en-us/library/windows/desktop/aa363208.aspx
return new LRESULT(1);
}
protected LRESULT onDeviceChangeArrival(LPARAM lParam) {
return onDeviceChangeArrivalOrRemoveComplete(lParam, "Arrival");
}
protected LRESULT onDeviceChangeRemoveComplete(LPARAM lParam) {
return onDeviceChangeArrivalOrRemoveComplete(lParam, "Remove Complete");
}
protected LRESULT onDeviceChangeNodesChanged() {
System.out.println("Message DBT_DEVNODES_CHANGED");
// return TRUE means processed message for this wParam.
// see http://msdn.microsoft.com/en-us/library/windows/desktop/aa363211.aspx
return new LRESULT(1);
}
/**
+46 -4
Ver Arquivo
@@ -57,12 +57,54 @@
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
nbproject/build-impl.xml file.
-->
<target name="-do-jar-without-manifest">
<jar jarfile="${dist.jar}" compress="${jar.compress}">
<manifest>
<attribute name="Main-Class" value="com.sun.jna.Native"/>
<attribute name="Manifest-Version" value="1.0"/>
<attribute name="Implementation-Title" value="${impl.title}"/>
<attribute name="Implementation-Vendor" value="${vendor}"/>
<attribute name="Implementation-Version" value="${impl.version}"/>
<attribute name="Specification-Title" value="${spec.title}"/>
<attribute name="Specification-Vendor" value="${spec.vendor}"/>
<attribute name="Specification-Version" value="${spec.version}"/>
<!--
OSGi Bundle attributes
See http://www.osgi.org/Specifications/Reference
-->
<attribute name="Bundle-Category" value="jni"/>
<attribute name="Bundle-ManifestVersion" value="2"/>
<attribute name="Bundle-Name" value="jna-platform"/>
<attribute name="Bundle-Description" value="JNA Platform Library"/>
<attribute name="Bundle-SymbolicName" value="com.sun.jna.platform"/>
<attribute name="Bundle-Version" value="${osgi.version}"/>
<attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
<attribute name="Bundle-Vendor" value="${vendor}"/>
<attribute name="Require-Bundle" value="com.sun.jna;bundle-version=&quot;${osgi.version}&quot;"/>
<attribute name="Export-Package"
value="
com.sun.jna.platform,
com.sun.jna.platform.dnd,
com.sun.jna.platform.mac,
com.sun.jna.platform.unix,
com.sun.jna.platform.win32,
com.sun.jna.platform.win32.COM,
com.sun.jna.platform.win32.COM.tlb,
com.sun.jna.platform.win32.COM.tlb.imp,
com.sun.jna.platform.wince
"/>
</manifest>
<fileset dir="${build.classes.dir}"/>
</jar>
</target>
<target name="test" depends="init,compile,compile-test,-pre-test-run" description="Run platform unit tests.">
<echo>Running platform tests: ${test.src.dir}</echo>
<property name="test.fork" value="yes"/>
@@ -106,7 +148,7 @@
<sysproperty key="jna.protected" value="true"/>
<sysproperty key="jna.builddir" file="${file.reference.jna.build}"/>
<jvmarg value="${vmopt.arch}"/>
<classpath><path path="${run.test.classpath}"/></classpath>
<classpath><path path="${run.test.classpath}"/><path path="${file.reference.jna.build}/test-classes"/></classpath>
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
<batchtest todir="${build.test.results.dir}">
+2 -1
Ver Arquivo
@@ -21,7 +21,8 @@ file.reference.jna-test.jar=../../build/jna-test.jar
libs.junit.classpath=../../lib/junit.jar
jar.compress=false
javac.classpath=\
${file.reference.jna.jar}
${file.reference.jna.jar}:\
${file.reference.jna.build}/test-classes
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
@@ -0,0 +1,62 @@
/*
* Copyright 2014 Martin Steiger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jna.platform;
import com.sun.jna.FromNativeContext;
import com.sun.jna.ToNativeContext;
import com.sun.jna.TypeConverter;
/**
* A {@link TypeConverter} that maps an integer enum value to
* an actual Java enum.
* @param <T> the enum type
* @author Martin Steiger
*/
public class EnumConverter<T extends Enum<T>> implements TypeConverter {
private final Class<T> clazz;
/**
* @param clazz the enum class
*/
public EnumConverter(Class<T> clazz)
{
this.clazz = clazz;
}
@Override
public T fromNative(Object input, FromNativeContext context) {
Integer i = (Integer) input;
T[] vals = clazz.getEnumConstants();
return vals[i];
}
@Override
public Integer toNative(Object input, ToNativeContext context) {
T t = clazz.cast(input);
return Integer.valueOf(t.ordinal());
}
@Override
public Class<Integer> nativeType() {
return Integer.class;
}
}
@@ -0,0 +1,105 @@
/*
* Copyright 2014 Martin Steiger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jna.platform;
import java.util.HashSet;
import java.util.Set;
import com.sun.jna.platform.win32.FlagEnum;
/**
* Several helper methods to convert integer flag (sets)
* into enum (sets)
* @author Martin Steiger
*/
public class EnumUtils
{
/**
* Uninitialized integer flag
*/
public static final int UNINITIALIZED = -1;
/**
* @param val the enum
* @return the index of the enum in the enum list
*/
public static <E extends Enum<E>> int toInteger(E val)
{
@SuppressWarnings("unchecked")
E[] vals = (E[]) val.getClass().getEnumConstants();
for (int idx = 0; idx < vals.length; idx++)
{
if (vals[idx] == val)
return idx;
}
throw new IllegalArgumentException();
}
/**
* @param idx the enum index
* @param clazz the enum class
* @return the enum at position idx
*/
public static <E extends Enum<E>> E fromInteger(int idx, Class<E> clazz)
{
if (idx == UNINITIALIZED)
return null;
E[] vals = clazz.getEnumConstants();
return vals[idx];
}
/**
* @param flags the ORed flags
* @param clazz the enum class
* @return the representing set
*/
public static <T extends FlagEnum> Set<T> setFromInteger(int flags, Class<T> clazz)
{
T[] vals = clazz.getEnumConstants();
Set<T> result = new HashSet<T>();
for (T val : vals)
{
if ((flags & val.getFlag()) != 0)
{
result.add(val);
}
}
return result;
}
/**
* @param set the set to convert
* @return the flags combined into an integer
*/
public static <T extends FlagEnum> int setToInteger(Set<T> set) {
int sum = 0;
for (T t : set)
{
sum |= t.getFlag();
}
return sum;
}
}
@@ -80,7 +80,7 @@ import com.sun.jna.platform.win32.WinGDI.BITMAPINFO;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.platform.win32.WinUser.BLENDFUNCTION;
import com.sun.jna.platform.win32.WinUser.POINT;
import com.sun.jna.platform.win32.WinDef.POINT;
import com.sun.jna.platform.win32.WinUser.SIZE;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.ptr.IntByReference;
@@ -32,6 +32,12 @@ import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
import static com.sun.jna.platform.win32.WinDef.BOOLByReference;
import static com.sun.jna.platform.win32.WinDef.DWORD;
import static com.sun.jna.platform.win32.WinDef.DWORDByReference;
import static com.sun.jna.platform.win32.WinNT.GENERIC_MAPPING;
import static com.sun.jna.platform.win32.WinNT.PRIVILEGE_SET;
/**
* Advapi32.dll Interface.
*
@@ -1523,4 +1529,33 @@ public interface Advapi32 extends StdCallLibrary {
int RequestedInformation, Pointer pointer, int nLength,
IntByReference lpnLengthNeeded);
/**
* Applies the given mapping of generic access rights to the given access mask.
* @param AccessMask [in, out] A pointer to an access mask.
* @param GenericMapping [in] A pointer to a GENERIC_MAPPING structure specifying a mapping of generic access types to specific and standard access types.
*/
public void MapGenericMask(DWORDByReference AccessMask, GENERIC_MAPPING GenericMapping);
/**
* Check if the if the security descriptor grants access to the given client token.
*
* @param pSecurityDescriptor [in] A pointer to a SECURITY_DESCRIPTOR structure against which access is checked.
* @param ClientToken [in] A handle to an impersonation token that represents the client that is attempting to gain access. The handle must have TOKEN_QUERY access to the token; otherwise, the function fails with ERROR_ACCESS_DENIED.
* @param DesiredAccess [in] Access mask that specifies the access rights to check. This mask must have been mapped by the MapGenericMask function to contain no generic access rights.<br>
* If this parameter is MAXIMUM_ALLOWED, the function sets the GrantedAccess access mask to indicate the maximum access rights the security descriptor allows the client.
* @param GenericMapping [in] A pointer to the GENERIC_MAPPING structure associated with the object for which access is being checked.
* @param PrivilegeSet [out, optional] A pointer to a PRIVILEGE_SET structure that receives the privileges used to perform the access validation. If no privileges were used, the function sets the PrivilegeCount member to zero.
* @param PrivilegeSetLength [in, out] Specifies the size, in bytes, of the buffer pointed to by the PrivilegeSet parameter.
* @param GrantedAccess [out] A pointer to an access mask that receives the granted access rights. If AccessStatus is set to FALSE, the function sets the access mask to zero. If the function fails, it does not set the access mask.
* @param AccessStatus [out] A pointer to a variable that receives the results of the access check. If the security descriptor allows the requested access rights to the client identified by the access token, AccessStatus is set to TRUE. Otherwise, AccessStatus is set to FALSE, and you can call GetLastError to get extended error information.
* @return true on success; false on failure (use GetLastError to get extended error information)
*/
public boolean AccessCheck(Pointer pSecurityDescriptor,
HANDLE ClientToken, DWORD DesiredAccess,
GENERIC_MAPPING GenericMapping,
PRIVILEGE_SET PrivilegeSet,
DWORDByReference PrivilegeSetLength,
DWORDByReference GrantedAccess, BOOLByReference AccessStatus);
}
@@ -12,6 +12,7 @@
*/
package com.sun.jna.platform.win32;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -40,6 +41,12 @@ import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.LongByReference;
import com.sun.jna.ptr.PointerByReference;
import static com.sun.jna.platform.win32.WinDef.BOOLByReference;
import static com.sun.jna.platform.win32.WinDef.DWORD;
import static com.sun.jna.platform.win32.WinDef.DWORDByReference;
import static com.sun.jna.platform.win32.WinNT.*;
/**
* Advapi32 utility API.
*
@@ -81,6 +88,7 @@ public abstract class Advapi32Util {
public String fqn;
}
/**
* Retrieves the name of the user associated with the current thread.
*
@@ -258,7 +266,7 @@ public abstract class Advapi32Util {
if (!Advapi32.INSTANCE.ConvertSidToStringSid(sid, stringSid)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
String result = stringSid.getValue().getString(0, true);
String result = stringSid.getValue().getWideString(0);
Kernel32.INSTANCE.LocalFree(stringSid.getValue());
return result;
}
@@ -430,14 +438,14 @@ public abstract class Advapi32Util {
// open thread or process token
HANDLE threadHandle = Kernel32.INSTANCE.GetCurrentThread();
if (!Advapi32.INSTANCE.OpenThreadToken(threadHandle,
WinNT.TOKEN_DUPLICATE | WinNT.TOKEN_QUERY, true, phToken)) {
TOKEN_DUPLICATE | TOKEN_QUERY, true, phToken)) {
if (W32Errors.ERROR_NO_TOKEN != Kernel32.INSTANCE
.GetLastError()) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
HANDLE processHandle = Kernel32.INSTANCE.GetCurrentProcess();
if (!Advapi32.INSTANCE.OpenProcessToken(processHandle,
WinNT.TOKEN_DUPLICATE | WinNT.TOKEN_QUERY, phToken)) {
TOKEN_DUPLICATE | TOKEN_QUERY, phToken)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
}
@@ -544,28 +552,7 @@ public abstract class Advapi32Util {
throw new Win32Exception(rc);
}
try {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_SZ
&& lpType.getValue() != WinNT.REG_EXPAND_SZ) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue()
+ ", expected REG_SZ or REG_EXPAND_SZ");
}
char[] data = new char[lpcbData.getValue()];
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return Native.toString(data);
return registryGetStringValue(phkKey.getValue(), value);
} finally {
rc = Advapi32.INSTANCE.RegCloseKey(phkKey.getValue());
if (rc != W32Errors.ERROR_SUCCESS) {
@@ -574,6 +561,40 @@ public abstract class Advapi32Util {
}
}
/**
* Get a registry REG_SZ value.
*
* @param hKey
* Parent Key.
* @param value
* Name of the value to retrieve.
* @return String value.
*/
public static String registryGetStringValue(HKEY hKey, String value) {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
int rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_SZ
&& lpType.getValue() != WinNT.REG_EXPAND_SZ) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue()
+ ", expected REG_SZ or REG_EXPAND_SZ");
}
char[] data = new char[lpcbData.getValue()];
rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return Native.toString(data);
}
/**
* Get a registry REG_EXPAND_SZ value.
*
@@ -594,26 +615,7 @@ public abstract class Advapi32Util {
throw new Win32Exception(rc);
}
try {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_EXPAND_SZ) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_SZ");
}
char[] data = new char[lpcbData.getValue()];
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return Native.toString(data);
return registryGetExpandableStringValue(phkKey.getValue(), value);
} finally {
rc = Advapi32.INSTANCE.RegCloseKey(phkKey.getValue());
if (rc != W32Errors.ERROR_SUCCESS) {
@@ -622,6 +624,38 @@ public abstract class Advapi32Util {
}
}
/**
* Get a registry REG_EXPAND_SZ value.
*
* @param hKey
* Parent Key.
* @param value
* Name of the value to retrieve.
* @return String value.
*/
public static String registryGetExpandableStringValue(HKEY hKey, String value) {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
int rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_EXPAND_SZ) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_SZ");
}
char[] data = new char[lpcbData.getValue()];
rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return Native.toString(data);
}
/**
* Get a registry REG_MULTI_SZ value.
*
@@ -642,38 +676,7 @@ public abstract class Advapi32Util {
throw new Win32Exception(rc);
}
try {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_MULTI_SZ) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_SZ");
}
Memory data = new Memory(lpcbData.getValue());
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
ArrayList<String> result = new ArrayList<String>();
int offset = 0;
while (offset < data.size()) {
String s = data.getString(offset, true);
offset += s.length() * Native.WCHAR_SIZE;
offset += Native.WCHAR_SIZE;
if (s.length() == 0 && offset == data.size()) {
// skip the final NULL
} else {
result.add(s);
}
}
return result.toArray(new String[0]);
return registryGetStringArray(phkKey.getValue(), value);
} finally {
rc = Advapi32.INSTANCE.RegCloseKey(phkKey.getValue());
if (rc != W32Errors.ERROR_SUCCESS) {
@@ -682,6 +685,50 @@ public abstract class Advapi32Util {
}
}
/**
* Get a registry REG_MULTI_SZ value.
*
* @param hKey
* Parent Key.
* @param value
* Name of the value to retrieve.
* @return String value.
*/
public static String[] registryGetStringArray(HKEY hKey, String value) {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
int rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_MULTI_SZ) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_SZ");
}
Memory data = new Memory(lpcbData.getValue());
rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
ArrayList<String> result = new ArrayList<String>();
int offset = 0;
while (offset < data.size()) {
String s = data.getWideString(offset);
offset += s.length() * Native.WCHAR_SIZE;
offset += Native.WCHAR_SIZE;
if (s.length() == 0 && offset == data.size()) {
// skip the final NULL
} else {
result.add(s);
}
}
return result.toArray(new String[0]);
}
/**
* Get a registry REG_BINARY value.
*
@@ -702,26 +749,7 @@ public abstract class Advapi32Util {
throw new Win32Exception(rc);
}
try {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_BINARY) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_BINARY");
}
byte[] data = new byte[lpcbData.getValue()];
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return data;
return registryGetBinaryValue(phkKey.getValue(), value);
} finally {
rc = Advapi32.INSTANCE.RegCloseKey(phkKey.getValue());
if (rc != W32Errors.ERROR_SUCCESS) {
@@ -730,6 +758,38 @@ public abstract class Advapi32Util {
}
}
/**
* Get a registry REG_BINARY value.
*
* @param hKey
* Parent Key.
* @param value
* Name of the value to retrieve.
* @return String value.
*/
public static byte[] registryGetBinaryValue(HKEY hKey, String value) {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
int rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_BINARY) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_BINARY");
}
byte[] data = new byte[lpcbData.getValue()];
rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return data;
}
/**
* Get a registry DWORD value.
*
@@ -749,26 +809,7 @@ public abstract class Advapi32Util {
throw new Win32Exception(rc);
}
try {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_DWORD) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_DWORD");
}
IntByReference data = new IntByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return data.getValue();
return registryGetIntValue(phkKey.getValue(), value);
} finally {
rc = Advapi32.INSTANCE.RegCloseKey(phkKey.getValue());
if (rc != W32Errors.ERROR_SUCCESS) {
@@ -777,6 +818,38 @@ public abstract class Advapi32Util {
}
}
/**
* Get a registry DWORD value.
*
* @param hKey
* Parent key.
* @param value
* Name of the value to retrieve.
* @return Integer value.
*/
public static int registryGetIntValue(HKEY hKey, String value) {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
int rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_DWORD) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_DWORD");
}
IntByReference data = new IntByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return data.getValue();
}
/**
* Get a registry QWORD value.
*
@@ -796,26 +869,7 @@ public abstract class Advapi32Util {
throw new Win32Exception(rc);
}
try {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_QWORD) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_QWORD");
}
LongByReference data = new LongByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(phkKey.getValue(), value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return data.getValue();
return registryGetLongValue(phkKey.getValue(), value);
} finally {
rc = Advapi32.INSTANCE.RegCloseKey(phkKey.getValue());
if (rc != W32Errors.ERROR_SUCCESS) {
@@ -823,6 +877,38 @@ public abstract class Advapi32Util {
}
}
}
/**
* Get a registry QWORD value.
*
* @param hKey
* Parent key.
* @param value
* Name of the value to retrieve.
* @return Integer value.
*/
public static long registryGetLongValue(HKEY hKey, String value) {
IntByReference lpcbData = new IntByReference();
IntByReference lpType = new IntByReference();
int rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, (char[]) null, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
if (lpType.getValue() != WinNT.REG_QWORD) {
throw new RuntimeException("Unexpected registry type "
+ lpType.getValue() + ", expected REG_QWORD");
}
LongByReference data = new LongByReference();
rc = Advapi32.INSTANCE.RegQueryValueEx(hKey, value, 0,
lpType, data, lpcbData);
if (rc != W32Errors.ERROR_SUCCESS
&& rc != W32Errors.ERROR_INSUFFICIENT_BUFFER) {
throw new Win32Exception(rc);
}
return data.getValue();
}
/**
* Get a registry value and returns a java object depending on the value
@@ -866,7 +952,7 @@ public abstract class Advapi32Util {
result = byteData.getByteArray(0, lpcbData.getValue());
} else if ((lpType.getValue() == WinNT.REG_SZ)
|| (lpType.getValue() == WinNT.REG_EXPAND_SZ)) {
result = byteData.getString(0, true);
result = byteData.getWideString(0);
}
return result;
@@ -1158,7 +1244,7 @@ public abstract class Advapi32Util {
int offset = 0;
Memory data = new Memory(size);
for (String s : arr) {
data.setString(offset, s, true);
data.setWideString(offset, s);
offset += s.length() * Native.WCHAR_SIZE;
offset += Native.WCHAR_SIZE;
}
@@ -1420,6 +1506,19 @@ public abstract class Advapi32Util {
return phkKey;
}
/**
* Close the registry key
*
* @param hKey
* Registry key.
*/
public static void registryCloseKey(HKEY hKey) {
int rc = Advapi32.INSTANCE.RegCloseKey(hKey);
if (rc != W32Errors.ERROR_SUCCESS) {
throw new Win32Exception(rc);
}
}
/**
* Get a table of registry values.
@@ -1495,7 +1594,7 @@ public abstract class Advapi32Util {
}
case WinNT.REG_SZ:
case WinNT.REG_EXPAND_SZ: {
keyValues.put(nameString, byteData.getString(0, true));
keyValues.put(nameString, byteData.getWideString(0));
break;
}
case WinNT.REG_BINARY: {
@@ -1509,7 +1608,7 @@ public abstract class Advapi32Util {
ArrayList<String> result = new ArrayList<String>();
int offset = 0;
while (offset < stringData.size()) {
String s = stringData.getString(offset, true);
String s = stringData.getWideString(offset);
offset += s.length() * Native.WCHAR_SIZE;
offset += Native.WCHAR_SIZE;
if (s.length() == 0 && offset == stringData.size()) {
@@ -1656,7 +1755,7 @@ public abstract class Advapi32Util {
* @return A environment block
*/
public static String getEnvironmentBlock(Map<String, String> environment) {
StringBuffer out = new StringBuffer();
StringBuilder out = new StringBuilder();
for (Entry<String, String> entry : environment.entrySet()) {
if (entry.getValue() != null) {
out.append(entry.getKey() + "=" + entry.getValue() + "\0");
@@ -1781,7 +1880,7 @@ public abstract class Advapi32Util {
public EventLogRecord(Pointer pevlr) {
_record = new EVENTLOGRECORD(pevlr);
_source = pevlr.getString(_record.size(), true);
_source = pevlr.getWideString(_record.size());
// data
if (_record.DataLength.intValue() > 0) {
_data = pevlr.getByteArray(_record.DataOffset.intValue(),
@@ -1793,7 +1892,7 @@ public abstract class Advapi32Util {
int count = _record.NumStrings.intValue();
long offset = _record.StringOffset.intValue();
while (count > 0) {
String s = pevlr.getString(offset, true);
String s = pevlr.getWideString(0);
strings.add(s);
offset += s.length() * Native.WCHAR_SIZE;
offset += Native.WCHAR_SIZE;
@@ -1971,4 +2070,119 @@ public abstract class Advapi32Util {
}
return aceStructures;
}
public static enum AccessCheckPermission {
READ(GENERIC_READ),
WRITE(GENERIC_WRITE),
EXECUTE(GENERIC_EXECUTE);
final int code;
AccessCheckPermission(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
private static Memory getSecurityDescriptorForFile(final String absoluteFilePath) {
final int infoType = OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION |
DACL_SECURITY_INFORMATION;
final IntByReference lpnSize = new IntByReference();
boolean succeeded = Advapi32.INSTANCE.GetFileSecurity(
new WString(absoluteFilePath),
infoType,
null,
0, lpnSize);
if (!succeeded) {
final int lastError = Kernel32.INSTANCE.GetLastError();
if (W32Errors.ERROR_INSUFFICIENT_BUFFER != lastError) {
throw new Win32Exception(lastError);
}
}
final int nLength = lpnSize.getValue();
final Memory securityDescriptorMemoryPointer = new Memory(nLength);
succeeded = Advapi32.INSTANCE.GetFileSecurity(new WString(
absoluteFilePath), infoType, securityDescriptorMemoryPointer, nLength, lpnSize);
if (!succeeded) {
securityDescriptorMemoryPointer.clear();
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
return securityDescriptorMemoryPointer;
}
/**
* Checks if the current process has the given permission for the file.
* @param file the file to check
* @param permissionToCheck the permission to check for the file
* @return true if has access, otherwise false
*/
public static boolean accessCheck(File file, AccessCheckPermission permissionToCheck) {
boolean hasAccess = false;
final Memory securityDescriptorMemoryPointer = getSecurityDescriptorForFile(file.getAbsolutePath().replaceAll("/", "\\"));
HANDLEByReference openedAccessToken = null;
final HANDLEByReference duplicatedToken = new HANDLEByReference();
try{
openedAccessToken = new HANDLEByReference();
final int desireAccess = TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_DUPLICATE | STANDARD_RIGHTS_READ;
if(!Advapi32.INSTANCE.OpenProcessToken(Kernel32.INSTANCE.GetCurrentProcess(), desireAccess, openedAccessToken)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
if(!Advapi32.INSTANCE.DuplicateToken(openedAccessToken.getValue(), SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation, duplicatedToken)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
final GENERIC_MAPPING mapping = new GENERIC_MAPPING();
mapping.genericRead = new DWORD(FILE_GENERIC_READ);
mapping.genericWrite = new DWORD(FILE_GENERIC_WRITE);
mapping.genericExecute = new DWORD(FILE_GENERIC_EXECUTE);
mapping.genericAll = new DWORD(FILE_ALL_ACCESS);
final DWORDByReference rights = new DWORDByReference(new DWORD(permissionToCheck.getCode()));
Advapi32.INSTANCE.MapGenericMask(rights, mapping);
final PRIVILEGE_SET privileges = new PRIVILEGE_SET(1);
privileges.PrivilegeCount = new DWORD(0);
final DWORDByReference privilegeLength = new DWORDByReference(new DWORD(privileges.size()));
final DWORDByReference grantedAccess = new DWORDByReference();
final BOOLByReference result = new BOOLByReference();
if(!Advapi32.INSTANCE.AccessCheck(securityDescriptorMemoryPointer,
duplicatedToken.getValue(),
rights.getValue(),
mapping,
privileges, privilegeLength, grantedAccess, result)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
hasAccess = result.getValue().booleanValue();
} finally {
if(openedAccessToken != null && openedAccessToken.getValue() != null) {
Kernel32.INSTANCE.CloseHandle(openedAccessToken.getValue());
}
if(duplicatedToken != null && duplicatedToken.getValue() != null) {
Kernel32.INSTANCE.CloseHandle(duplicatedToken.getValue());
}
if(securityDescriptorMemoryPointer != null) {
securityDescriptorMemoryPointer.clear();
}
}
return hasAccess;
}
}
@@ -1,15 +1,15 @@
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32;
import com.sun.jna.IntegerType;
@@ -18,15 +18,15 @@ import com.sun.jna.ptr.ByReference;
import com.sun.jna.win32.StdCallLibrary;
/**
* Based on basetsd.h (various types)
* @author dblock[at]dblock[dot]org
*/
* Based on basetsd.h (various types)
* @author dblock[at]dblock[dot]org
*/
@SuppressWarnings("serial")
public interface BaseTSD extends StdCallLibrary {
/**
* Signed long type for pointer precision.
* Use when casting a pointer to a long to perform pointer arithmetic.
*/
* Signed long type for pointer precision.
* Use when casting a pointer to a long to perform pointer arithmetic.
*/
public static class LONG_PTR extends IntegerType {
public LONG_PTR() {
this(0);
@@ -40,10 +40,10 @@ public interface BaseTSD extends StdCallLibrary {
return Pointer.createConstant(longValue());
}
}
/**
* Signed SIZE_T.
*/
* Signed SIZE_T.
*/
public static class SSIZE_T extends LONG_PTR {
public SSIZE_T() {
this(0);
@@ -55,8 +55,8 @@ public interface BaseTSD extends StdCallLibrary {
}
/**
* Unsigned LONG_PTR.
*/
* Unsigned LONG_PTR.
*/
public static class ULONG_PTR extends IntegerType {
public ULONG_PTR() {
this(0);
@@ -72,8 +72,8 @@ public interface BaseTSD extends StdCallLibrary {
}
/**
* PULONG_PTR
*/
* PULONG_PTR
*/
public static class ULONG_PTRByReference extends ByReference {
public ULONG_PTRByReference() {
this(new ULONG_PTR(0));
@@ -99,8 +99,8 @@ public interface BaseTSD extends StdCallLibrary {
/**
* Unsigned DWORD_PTR.
*/
* Unsigned DWORD_PTR.
*/
public static class DWORD_PTR extends IntegerType {
public DWORD_PTR() {
this(0);
@@ -112,9 +112,9 @@ public interface BaseTSD extends StdCallLibrary {
}
/**
* The maximum number of bytes to which a pointer can point.
* Use for a count that must span the full range of a pointer.
*/
* The maximum number of bytes to which a pointer can point.
* Use for a count that must span the full range of a pointer.
*/
public static class SIZE_T extends ULONG_PTR {
public SIZE_T() {
this(0);
@@ -124,4 +124,4 @@ public interface BaseTSD extends StdCallLibrary {
super(value);
}
}
}
}
@@ -0,0 +1,338 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid;
import com.sun.jna.platform.win32.Guid.CLSID;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.OaIdl;
import com.sun.jna.platform.win32.OaIdl.DISPID;
import com.sun.jna.platform.win32.OaIdl.DISPIDByReference;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.platform.win32.Ole32;
import com.sun.jna.platform.win32.OleAuto;
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.Variant.VariantArg;
import com.sun.jna.platform.win32.WTypes;
import com.sun.jna.platform.win32.WinDef.LCID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Helper class to provide basic COM support.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class COMBindingBaseObject extends COMInvoker {
/** The Constant LOCALE_USER_DEFAULT. */
public final static LCID LOCALE_USER_DEFAULT = Kernel32.INSTANCE
.GetUserDefaultLCID();
/** The Constant LOCALE_SYSTEM_DEFAULT. */
public final static LCID LOCALE_SYSTEM_DEFAULT = Kernel32.INSTANCE
.GetSystemDefaultLCID();
/** The i unknown. */
private IUnknown iUnknown;
/** The i dispatch. */
private IDispatch iDispatch;
/** IDispatch interface reference. */
private PointerByReference pDispatch = new PointerByReference();
/** IUnknown interface reference. */
private PointerByReference pUnknown = new PointerByReference();
public COMBindingBaseObject(IDispatch dispatch) {
// transfer the value
this.iDispatch = dispatch;
}
public COMBindingBaseObject(CLSID clsid, boolean useActiveInstance) {
this(clsid, useActiveInstance, WTypes.CLSCTX_SERVER);
}
public COMBindingBaseObject(CLSID clsid, boolean useActiveInstance,
int dwClsContext) {
// Initialize COM for this thread...
HRESULT hr = Ole32.INSTANCE.CoInitialize(null);
if (COMUtils.FAILED(hr)) {
Ole32.INSTANCE.CoUninitialize();
throw new COMException("CoInitialize() failed!");
}
if (useActiveInstance) {
hr = OleAuto.INSTANCE.GetActiveObject(clsid, null, this.pUnknown);
if (COMUtils.SUCCEEDED(hr)) {
this.iUnknown = new Unknown(this.pUnknown.getValue());
hr = iUnknown.QueryInterface(IDispatch.IID_IDISPATCH,
this.pDispatch);
} else {
hr = Ole32.INSTANCE.CoCreateInstance(clsid, null, dwClsContext,
IDispatch.IID_IDISPATCH, this.pDispatch);
}
} else {
hr = Ole32.INSTANCE.CoCreateInstance(clsid, null, dwClsContext,
IDispatch.IID_IDISPATCH, this.pDispatch);
}
if (COMUtils.FAILED(hr)) {
throw new COMException("COM object with CLSID "
+ clsid.toGuidString() + " not registered properly!");
}
this.iDispatch = new Dispatch(this.pDispatch.getValue());
}
public COMBindingBaseObject(String progId, boolean useActiveInstance,
int dwClsContext) throws COMException {
// Initialize COM for this thread...
HRESULT hr = Ole32.INSTANCE.CoInitialize(null);
if (COMUtils.FAILED(hr)) {
this.release();
throw new COMException("CoInitialize() failed!");
}
// Get CLSID for Word.Application...
CLSID.ByReference clsid = new CLSID.ByReference();
hr = Ole32.INSTANCE.CLSIDFromProgID(progId, clsid);
if (COMUtils.FAILED(hr)) {
Ole32.INSTANCE.CoUninitialize();
throw new COMException("CLSIDFromProgID() failed!");
}
if (useActiveInstance) {
hr = OleAuto.INSTANCE.GetActiveObject(clsid, null, this.pUnknown);
if (COMUtils.SUCCEEDED(hr)) {
this.iUnknown = new Unknown(this.pUnknown.getValue());
hr = iUnknown.QueryInterface(IDispatch.IID_IDISPATCH,
this.pDispatch);
} else {
hr = Ole32.INSTANCE.CoCreateInstance(clsid, null, dwClsContext,
IDispatch.IID_IDISPATCH, this.pDispatch);
}
} else {
hr = Ole32.INSTANCE.CoCreateInstance(clsid, null, dwClsContext,
IDispatch.IID_IDISPATCH, this.pDispatch);
}
if (COMUtils.FAILED(hr)) {
throw new COMException("COM object with ProgID '" + progId
+ "' and CLSID " + clsid.toGuidString()
+ " not registered properly!");
}
this.iDispatch = new Dispatch(this.pDispatch.getValue());
}
public COMBindingBaseObject(String progId, boolean useActiveInstance)
throws COMException {
this(progId, useActiveInstance, WTypes.CLSCTX_SERVER);
}
/**
* Gets the i dispatch.
*
* @return the i dispatch
*/
public IDispatch getIDispatch() {
return iDispatch;
}
/**
* Gets the i dispatch pointer.
*
* @return the i dispatch pointer
*/
public PointerByReference getIDispatchPointer() {
return pDispatch;
}
/**
* Gets the i unknown.
*
* @return the i unknown
*/
public IUnknown getIUnknown() {
return iUnknown;
}
/**
* Gets the i unknown pointer.
*
* @return the i unknown pointer
*/
public PointerByReference getIUnknownPointer() {
return pUnknown;
}
/**
* Release.
*/
public void release() {
if (this.iDispatch != null)
this.iDispatch.Release();
Ole32.INSTANCE.CoUninitialize();
}
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, String name, VARIANT[] pArgs) throws COMException {
if (pDisp == null)
throw new COMException("pDisp (IDispatch) parameter is null!");
// variable declaration
WString[] ptName = new WString[] { new WString(name) };
DISPIDByReference pdispID = new DISPIDByReference();
// Get DISPID for name passed...
HRESULT hr = pDisp.GetIDsOfNames(Guid.IID_NULL, ptName, 1,
LOCALE_USER_DEFAULT, pdispID);
COMUtils.checkRC(hr);
return this
.oleMethod(nType, pvResult, pDisp, pdispID.getValue(), pArgs);
}
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, DISPID dispId, VARIANT[] pArgs)
throws COMException {
if (pDisp == null)
throw new COMException("pDisp (IDispatch) parameter is null!");
// variable declaration
int _argsLen = 0;
VARIANT[] _args = null;
DISPPARAMS dp = new DISPPARAMS();
EXCEPINFO.ByReference pExcepInfo = new EXCEPINFO.ByReference();
IntByReference puArgErr = new IntByReference();
// make parameter reverse ordering as expected by COM runtime
if ((pArgs != null) && (pArgs.length > 0)) {
_argsLen = pArgs.length;
_args = new VARIANT[_argsLen];
int revCount = _argsLen;
for (int i = 0; i < _argsLen; i++) {
_args[i] = pArgs[--revCount];
}
}
// Handle special-case for property-puts!
if (nType == OleAuto.DISPATCH_PROPERTYPUT) {
dp.cNamedArgs = new UINT(_argsLen);
dp.rgdispidNamedArgs = new DISPIDByReference(
OaIdl.DISPID_PROPERTYPUT);
}
// Build DISPPARAMS
if (_argsLen > 0) {
dp.cArgs = new UINT(_args.length);
// make pointer of variant array
dp.rgvarg = new VariantArg.ByReference(_args);
// write 'DISPPARAMS' structure to memory
dp.write();
}
// Make the call!
HRESULT hr = pDisp.Invoke(dispId, Guid.IID_NULL, LOCALE_SYSTEM_DEFAULT,
new DISPID(nType), dp, pvResult, pExcepInfo, puArgErr);
COMUtils.checkRC(hr, pExcepInfo, puArgErr);
return hr;
}
/**
* Ole method.
*
* @param nType
* the n type
* @param pvResult
* the pv result
* @param pDisp
* the disp
* @param name
* the name
* @param pArg
* the arg
* @return the hresult
* @throws COMException
* the cOM exception
*/
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, String name, VARIANT pArg) throws COMException {
return this.oleMethod(nType, pvResult, pDisp, name,
new VARIANT[] { pArg });
}
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, DISPID dispId, VARIANT pArg) throws COMException {
return this.oleMethod(nType, pvResult, pDisp, dispId,
new VARIANT[] { pArg });
}
/**
* Ole method.
*
* @param nType
* the n type
* @param pvResult
* the pv result
* @param pDisp
* the disp
* @param name
* the name
* @return the hresult
* @throws COMException
* the cOM exception
*/
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, String name) throws COMException {
return this.oleMethod(nType, pvResult, pDisp, name, (VARIANT[]) null);
}
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, DISPID dispId) throws COMException {
return this.oleMethod(nType, pvResult, pDisp, dispId, (VARIANT[]) null);
}
/**
* Check failed.
*
* @param hr
* the hr
*/
protected void checkFailed(HRESULT hr) {
COMUtils.checkRC(hr, null, null);
}
}
@@ -0,0 +1,100 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid.CLSID;
import com.sun.jna.platform.win32.Guid.IID;
import com.sun.jna.platform.win32.OaIdl.DISPID;
import com.sun.jna.platform.win32.OaIdl.DISPIDByReference;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.platform.win32.OleAuto;
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.Variant.VARIANT.ByReference;
import com.sun.jna.platform.win32.WinDef.LCID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.UINTByReference;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Helper class to provide basic COM support.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class COMEarlyBindingObject extends COMBindingBaseObject implements
IDispatch {
public COMEarlyBindingObject(CLSID clsid, boolean useActiveInstance,
int dwClsContext) {
super(clsid, useActiveInstance, dwClsContext);
}
protected String getStringProperty(DISPID dispId) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.getIDispatch(), dispId);
return result.getValue().toString();
}
protected void setProperty(DISPID dispId, boolean value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null, this.getIDispatch(),
dispId, new VARIANT(value));
}
@Override
public HRESULT QueryInterface(IID riid, PointerByReference ppvObject) {
return this.getIDispatch().QueryInterface(riid, ppvObject);
}
@Override
public int AddRef() {
return this.getIDispatch().AddRef();
}
@Override
public int Release() {
return this.getIDispatch().Release();
}
@Override
public HRESULT GetTypeInfoCount(UINTByReference pctinfo) {
return this.getIDispatch().GetTypeInfoCount(pctinfo);
}
@Override
public HRESULT GetTypeInfo(UINT iTInfo, LCID lcid,
PointerByReference ppTInfo) {
return this.getIDispatch().GetTypeInfo(iTInfo, lcid, ppTInfo);
}
@Override
public HRESULT GetIDsOfNames(IID riid, WString[] rgszNames, int cNames,
LCID lcid, DISPIDByReference rgDispId) {
return this.getIDispatch().GetIDsOfNames(riid, rgszNames, cNames, lcid,
rgDispId);
}
@Override
public HRESULT Invoke(DISPID dispIdMember, IID riid, LCID lcid,
DISPID wFlags, DISPPARAMS pDispParams, ByReference pVarResult,
EXCEPINFO.ByReference pExcepInfo,
IntByReference puArgErr) {
return this.getIDispatch().Invoke(dispIdMember, riid, lcid, wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
}
}
@@ -15,6 +15,7 @@ package com.sun.jna.platform.win32.COM;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.ptr.IntByReference;
// TODO: Auto-generated Javadoc
/**
* Exception class for all COM related classes.
*
@@ -22,83 +23,93 @@ import com.sun.jna.ptr.IntByReference;
*/
public class COMException extends RuntimeException {
/** The p excep info. */
private EXCEPINFO pExcepInfo;
/** The p excep info. */
private EXCEPINFO pExcepInfo;
/** The pu arg err. */
private IntByReference puArgErr;
/** The pu arg err. */
private IntByReference puArgErr;
private int uArgErr;
/**
* Instantiates a new automation exception.
*/
public COMException() {
super();
}
/**
* Instantiates a new automation exception.
*/
public COMException() {
super();
}
/**
* Instantiates a new automation exception.
*
* @param message
* the message
* @param cause
* the cause
*/
public COMException(String message, Throwable cause) {
super(message, cause);
}
/**
* Instantiates a new automation exception.
*
* @param message
* the message
* @param cause
* the cause
*/
public COMException(String message, Throwable cause) {
super(message, cause);
}
/**
* Instantiates a new automation exception.
*
* @param message
* the message
*/
public COMException(String message) {
super(message);
}
/**
* Instantiates a new automation exception.
*
* @param message
* the message
*/
public COMException(String message) {
super(message);
}
/**
* Instantiates a new automation exception.
*
* @param message
* the message
* @param pExcepInfo
* the excep info
* @param puArgErr
* the pu arg err
*/
public COMException(String message, EXCEPINFO pExcepInfo,
IntByReference puArgErr) {
super(message + " (puArgErr=" + puArgErr.getValue() + ")");
this.pExcepInfo = pExcepInfo;
this.puArgErr = puArgErr;
}
/**
* Instantiates a new automation exception.
*
* @param message
* the message
* @param pExcepInfo
* the excep info
* @param puArgErr
* the pu arg err
*/
public COMException(String message, EXCEPINFO pExcepInfo,
IntByReference puArgErr) {
super(message);
this.pExcepInfo = pExcepInfo;
this.puArgErr = puArgErr;
}
/**
* Instantiates a new automation exception.
*
* @param cause
* the cause
*/
public COMException(Throwable cause) {
super(cause);
}
/**
* Instantiates a new automation exception.
*
* @param cause
* the cause
*/
public COMException(Throwable cause) {
super(cause);
}
/**
* Gets the excep info.
*
* @return the excep info
*/
public EXCEPINFO getExcepInfo() {
return pExcepInfo;
}
/**
* Gets the excep info.
*
* @return the excep info
*/
public EXCEPINFO getExcepInfo() {
return pExcepInfo;
}
/**
* Gets the arg err.
*
* @return the arg err
*/
public IntByReference getArgErr() {
return puArgErr;
}
/**
* Gets the arg err.
*
* @return the arg err
*/
public IntByReference getArgErr() {
return puArgErr;
}
public int getuArgErr() {
return uArgErr;
}
public void setuArgErr(int uArgErr) {
this.uArgErr = uArgErr;
}
}
@@ -0,0 +1,49 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Function;
import com.sun.jna.Pointer;
import com.sun.jna.PointerType;
public abstract class COMInvoker extends PointerType {
protected int _invokeNativeInt(int vtableId, Object[] args) {
Pointer vptr = this.getPointer().getPointer(0);
// we take the vtable id and multiply with the pointer size (4 bytes on
// 32bit OS)
Function func = Function.getFunction(vptr.getPointer(vtableId
* Pointer.SIZE));
return func.invokeInt(args);
}
protected Object _invokeNativeObject(int vtableId, Object[] args,
Class returnType) {
Pointer vptr = this.getPointer().getPointer(0);
// we take the vtable id and multiply with the pointer size (4 bytes on
// 32bit OS)
Function func = Function.getFunction(vptr.getPointer(vtableId
* Pointer.SIZE));
return func.invoke(returnType, args);
}
protected void _invokeNativeVoid(int vtableId, Object[] args) {
Pointer vptr = this.getPointer().getPointer(0);
// we take the vtable id and multiply with the pointer size (4 bytes on
// 32bit OS)
Function func = Function.getFunction(vptr.getPointer(vtableId
* Pointer.SIZE));
func.invokeVoid(args);
}
}
@@ -0,0 +1,622 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import java.util.Date;
import com.sun.jna.platform.win32.Guid.CLSID;
import com.sun.jna.platform.win32.OaIdl.VARIANT_BOOL;
import com.sun.jna.platform.win32.OleAuto;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WinDef.LONG;
import com.sun.jna.platform.win32.WinDef.SHORT;
// TODO: Auto-generated Javadoc
/**
* Helper class to provide basic COM support.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class COMLateBindingObject extends COMBindingBaseObject {
/**
* Instantiates a new cOM object.
*
* @param iDispatch
* the i dispatch
*/
public COMLateBindingObject(IDispatch iDispatch) {
super(iDispatch);
}
/**
* Instantiates a new cOM object.
*
* @param clsid
* the clsid
* @param useActiveInstance
* the use active instance
*/
public COMLateBindingObject(CLSID clsid, boolean useActiveInstance) {
super(clsid, useActiveInstance);
}
/**
* Instantiates a new cOM object.
*
* @param progId
* the prog id
* @param useActiveInstance
* the use active instance
* @throws COMException
* the automation exception
*/
public COMLateBindingObject(String progId, boolean useActiveInstance)
throws COMException {
super(progId, useActiveInstance);
}
/**
* Gets the automation property.
*
* @param propertyName
* the property name
* @return the automation property
*/
protected IDispatch getAutomationProperty(String propertyName) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.getIDispatch(), propertyName);
return ((IDispatch) result.getValue());
}
/**
* Gets the automation property.
*
* @param propertyName
* the property name
* @param comObject
* the com object
* @return the automation property
*/
protected IDispatch getAutomationProperty(String propertyName,
COMLateBindingObject comObject) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
comObject.getIDispatch(), propertyName);
return ((IDispatch) result.getValue());
}
/**
* Gets the automation property.
*
* @param propertyName
* the property name
* @param comObject
* the com object
* @param value
* the value
* @return the automation property
*/
protected IDispatch getAutomationProperty(String propertyName,
COMLateBindingObject comObject, VARIANT value) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
comObject.getIDispatch(), propertyName, value);
return ((IDispatch) result.getValue());
}
/**
* Gets the automation property.
*
* @param propertyName
* the property name
* @param iDispatch
* the i dispatch
* @return the automation property
*/
protected IDispatch getAutomationProperty(String propertyName,
IDispatch iDispatch) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.getIDispatch(), propertyName);
return ((IDispatch) result.getValue());
}
/**
* Gets the boolean property.
*
* @param propertyName
* the property name
* @return the boolean property
*/
protected boolean getBooleanProperty(String propertyName) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.getIDispatch(), propertyName);
return (((VARIANT_BOOL) result.getValue()).intValue() != 0);
}
/**
* Gets the date property.
*
* @param propertyName
* the property name
* @return the date property
*/
protected Date getDateProperty(String propertyName) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.getIDispatch(), propertyName);
return result.dateValue();
}
/**
* Gets the int property.
*
* @param propertyName
* the property name
* @return the int property
*/
protected int getIntProperty(String propertyName) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.getIDispatch(), propertyName);
return ((LONG) result.getValue()).intValue();
}
/**
* Gets the short property.
*
* @param propertyName
* the property name
* @return the short property
*/
protected short getShortProperty(String propertyName) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.getIDispatch(), propertyName);
return ((SHORT) result.getValue()).shortValue();
}
/**
* Gets the string property.
*
* @param propertyName
* the property name
* @return the string property
*/
protected String getStringProperty(String propertyName) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
this.getIDispatch(), propertyName);
return result.getValue().toString();
}
/**
* Invoke.
*
* @param methodName
* the method name
* @return the variant
*/
protected VARIANT invoke(String methodName) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_METHOD, result, this.getIDispatch(),
methodName);
return result;
}
/**
* Invoke.
*
* @param methodName
* the method name
* @param arg
* the arg
* @return the variant
*/
protected VARIANT invoke(String methodName, VARIANT arg) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_METHOD, result, this.getIDispatch(),
methodName, arg);
return result;
}
/**
* Invoke.
*
* @param methodName
* the method name
* @param args
* the args
* @return the variant
*/
protected VARIANT invoke(String methodName, VARIANT[] args) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_METHOD, result, this.getIDispatch(),
methodName, args);
return result;
}
/**
* Invoke.
*
* @param methodName
* the method name
* @param arg1
* the arg1
* @param arg2
* the arg2
* @return the variant
*/
protected VARIANT invoke(String methodName, VARIANT arg1, VARIANT arg2) {
return invoke(methodName, new VARIANT[] { arg1, arg2 });
}
/**
* Invoke.
*
* @param methodName
* the method name
* @param arg1
* the arg1
* @param arg2
* the arg2
* @param arg3
* the arg3
* @return the variant
*/
protected VARIANT invoke(String methodName, VARIANT arg1, VARIANT arg2,
VARIANT arg3) {
return invoke(methodName, new VARIANT[] { arg1, arg2, arg3 });
}
/**
* Invoke.
*
* @param methodName
* the method name
* @param arg1
* the arg1
* @param arg2
* the arg2
* @param arg3
* the arg3
* @param arg4
* the arg4
* @return the variant
*/
protected VARIANT invoke(String methodName, VARIANT arg1, VARIANT arg2,
VARIANT arg3, VARIANT arg4) {
return invoke(methodName, new VARIANT[] { arg1, arg2, arg3, arg4 });
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param dispatch
* the dispatch
*/
protected void invokeNoReply(String methodName, IDispatch dispatch) {
this.oleMethod(OleAuto.DISPATCH_METHOD, null, dispatch, methodName);
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param comObject
* the com object
*/
protected void invokeNoReply(String methodName,
COMLateBindingObject comObject) {
this.oleMethod(OleAuto.DISPATCH_METHOD, null, comObject.getIDispatch(),
methodName);
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param dispatch
* the dispatch
* @param arg
* the arg
*/
protected void invokeNoReply(String methodName, IDispatch dispatch,
VARIANT arg) {
this.oleMethod(OleAuto.DISPATCH_METHOD, null, dispatch, methodName, arg);
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param dispatch
* the dispatch
* @param arg1
* the arg1
* @param arg2
* the arg2
*/
protected void invokeNoReply(String methodName, IDispatch dispatch,
VARIANT arg1, VARIANT arg2) {
this.oleMethod(OleAuto.DISPATCH_METHOD, null, dispatch, methodName,
new VARIANT[] { arg1, arg2 });
}
protected void invokeNoReply(String methodName, COMLateBindingObject comObject,
VARIANT arg1, VARIANT arg2) {
this.oleMethod(OleAuto.DISPATCH_METHOD, null, comObject.getIDispatch(), methodName,
new VARIANT[] { arg1, arg2 });
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param comObject
* the com object
* @param arg
* the arg
*/
protected void invokeNoReply(String methodName,
COMLateBindingObject comObject, VARIANT arg) {
this.oleMethod(OleAuto.DISPATCH_METHOD, null, comObject.getIDispatch(),
methodName, arg);
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param dispatch
* the dispatch
* @param args
* the args
*/
protected void invokeNoReply(String methodName, IDispatch dispatch,
VARIANT[] args) {
this.oleMethod(OleAuto.DISPATCH_METHOD, null, dispatch, methodName,
args);
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
*/
protected void invokeNoReply(String methodName) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_METHOD, result, this.getIDispatch(),
methodName);
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param arg
* the arg
*/
protected void invokeNoReply(String methodName, VARIANT arg) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_METHOD, result, this.getIDispatch(),
methodName, arg);
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param args
* the args
*/
protected void invokeNoReply(String methodName, VARIANT[] args) {
VARIANT.ByReference result = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_METHOD, result, this.getIDispatch(),
methodName, args);
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param arg1
* the arg1
* @param arg2
* the arg2
*/
protected void invokeNoReply(String methodName, VARIANT arg1, VARIANT arg2) {
invokeNoReply(methodName, new VARIANT[] { arg1, arg2 });
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param arg1
* the arg1
* @param arg2
* the arg2
* @param arg3
* the arg3
*/
protected void invokeNoReply(String methodName, VARIANT arg1, VARIANT arg2,
VARIANT arg3) {
invokeNoReply(methodName, new VARIANT[] { arg1, arg2, arg3 });
}
/**
* Invoke no reply.
*
* @param methodName
* the method name
* @param arg1
* the arg1
* @param arg2
* the arg2
* @param arg3
* the arg3
* @param arg4
* the arg4
*/
protected void invokeNoReply(String methodName, VARIANT arg1, VARIANT arg2,
VARIANT arg3, VARIANT arg4) {
invokeNoReply(methodName, new VARIANT[] { arg1, arg2, arg3, arg4 });
}
/**
* Sets the property.
*
* @param propertyName
* the property name
* @param value
* the value
*/
protected void setProperty(String propertyName, boolean value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null, this.getIDispatch(),
propertyName, new VARIANT(value));
}
/**
* Sets the property.
*
* @param propertyName
* the property name
* @param value
* the value
*/
protected void setProperty(String propertyName, Date value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null, this.getIDispatch(),
propertyName, new VARIANT(value));
}
/**
* Sets the property.
*
* @param propertyName
* the property name
* @param value
* the value
*/
protected void setProperty(String propertyName, IDispatch value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null, this.getIDispatch(),
propertyName, new VARIANT(value));
}
/**
* Sets the property.
*
* @param propertyName
* the property name
* @param value
* the value
*/
protected void setProperty(String propertyName, int value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null, this.getIDispatch(),
propertyName, new VARIANT(value));
}
/**
* Sets the property.
*
* @param propertyName
* the property name
* @param value
* the value
*/
protected void setProperty(String propertyName, short value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null, this.getIDispatch(),
propertyName, new VARIANT(value));
}
/**
* Sets the property.
*
* @param propertyName
* the property name
* @param value
* the value
*/
protected void setProperty(String propertyName, String value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null, this.getIDispatch(),
propertyName, new VARIANT(value));
}
/**
* Sets the property.
*
* @param propertyName
* the property name
* @param iDispatch
* the i dispatch
* @param value
* the value
*/
protected void setProperty(String propertyName, IDispatch iDispatch,
VARIANT value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null, iDispatch,
propertyName, value);
}
/**
* Sets the property.
*
* @param propertyName
* the property name
* @param comObject
* the com object
* @param value
* the value
*/
protected void setProperty(String propertyName,
COMLateBindingObject comObject, VARIANT value) {
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null,
comObject.getIDispatch(), propertyName, value);
}
/**
* To variant.
*
* @return the variant
*/
public VARIANT toVariant() {
return new VARIANT(this.getIDispatch());
}
}
@@ -1,200 +0,0 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Native;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid;
import com.sun.jna.platform.win32.Guid.CLSID;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.Kernel32Util;
import com.sun.jna.platform.win32.OaIdl;
import com.sun.jna.platform.win32.OaIdl.DISPID;
import com.sun.jna.platform.win32.OaIdl.DISPIDByReference;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.platform.win32.Ole32;
import com.sun.jna.platform.win32.OleAuto;
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.Variant.VariantArg;
import com.sun.jna.platform.win32.WTypes;
import com.sun.jna.platform.win32.WinDef.LCID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
/**
* Helper class to provide basic COM support.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class COMObject {
public final static LCID LOCALE_USER_DEFAULT = Kernel32.INSTANCE
.GetUserDefaultLCID();
public final static LCID LOCALE_SYSTEM_DEFAULT = Kernel32.INSTANCE
.GetSystemDefaultLCID();
protected IUnknown iUnknown;
protected IDispatch iDispatch;
private PointerByReference pDispatch = new PointerByReference();
private PointerByReference pUnknown = new PointerByReference();
public COMObject(IDispatch iDispatch) {
this.iDispatch = iDispatch;
}
/**
* Instantiates a new cOM object.
*
* @param progId
* the prog id
* @param useActiveInstance
* the use active instance
* @throws COMException
* the automation exception
*/
public COMObject(String progId, boolean useActiveInstance)
throws COMException {
// Initialize COM for this thread...
HRESULT hr = Ole32.INSTANCE.CoInitializeEx(null, Ole32.COINIT_MULTITHREADED);
if (COMUtils.FAILED(hr)) {
this.release();
throw new COMException("CoInitializeEx() failed: " + Kernel32Util.formatMessage(hr));
}
CLSID clsid = new CLSID();
hr = Ole32.INSTANCE.CLSIDFromProgID(progId, clsid);
if (COMUtils.FAILED(hr)) {
Ole32.INSTANCE.CoUninitialize();
throw new COMException("CLSIDFromProgID() failed: " + Kernel32Util.formatMessage(hr));
}
if (useActiveInstance) {
hr = OleAuto.INSTANCE.GetActiveObject(clsid, null, this.pUnknown);
if (COMUtils.SUCCEEDED(hr)) {
this.iUnknown = new IUnknown(this.pUnknown.getValue());
hr = iUnknown.QueryInterface(IDispatch.IID_IDispatch,
this.pDispatch);
} else {
hr = Ole32.INSTANCE.CoCreateInstance(clsid, null,
WTypes.CLSCTX_SERVER, IDispatch.IID_IDispatch,
this.pDispatch);
}
} else {
hr = Ole32.INSTANCE.CoCreateInstance(clsid, null,
WTypes.CLSCTX_SERVER, IDispatch.IID_IDispatch,
this.pDispatch);
}
if (COMUtils.FAILED(hr)) {
throw new COMException("COM object with ProgID '" + progId
+ "' and CLSID " + clsid.toGuidString() + " not registered properly!");
}
this.iDispatch = new IDispatch(this.pDispatch.getValue());
}
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, String name, VARIANT[] pArgs) throws COMException {
if (pDisp == null)
throw new COMException("pDisp (IDispatch) parameter is null!");
WString[] ptName = new WString[] { new WString(name) };
DISPPARAMS dp = new DISPPARAMS();
DISPIDByReference pdispID = new DISPIDByReference();
VariantArg.ByReference variantArg = new VariantArg.ByReference();
variantArg.variantArg = pArgs;
EXCEPINFO.ByReference pExcepInfo = new EXCEPINFO.ByReference();
IntByReference puArgErr = new IntByReference();
// Get DISPID for name passed...
HRESULT hr = pDisp.GetIDsOfNames(Guid.IID_NULL, ptName, 1,
LOCALE_USER_DEFAULT, pdispID);
COMUtils.checkAutoRC(hr);
// Handle special-case for property-puts!
if (nType == OleAuto.DISPATCH_PROPERTYPUT) {
dp.cNamedArgs = new UINT(pArgs.length);
dp.rgdispidNamedArgs = new DISPIDByReference(
OaIdl.DISPID_PROPERTYPUT);
}
// Build DISPPARAMS
if ((pArgs != null) && (pArgs.length > 0)) {
dp.cArgs = new UINT(pArgs.length);
dp.rgvarg = variantArg;
// write 'DISPPARAMS' structure to memory
dp.write();
}
// Make the call!
hr = pDisp.Invoke(pdispID.getValue(), Guid.IID_NULL,
LOCALE_SYSTEM_DEFAULT, new DISPID(nType), dp, pvResult,
pExcepInfo, puArgErr);
COMUtils.checkAutoRC(hr, pExcepInfo, puArgErr);
return hr;
}
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, String name, VARIANT pArg) throws COMException {
return this.oleMethod(nType, pvResult, pDisp, name,
new VARIANT[] { pArg });
}
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
IDispatch pDisp, String name) throws COMException {
return this.oleMethod(nType, pvResult, pDisp, name, (VARIANT[]) null);
}
protected void checkFailed(HRESULT hr) {
COMUtils.checkAutoRC(hr, null, null);
}
public IDispatch getIDispatch() {
return iDispatch;
}
public PointerByReference getIDispatchPointer() {
return pDispatch;
}
public IUnknown getIUnknown() {
return iUnknown;
}
public PointerByReference getIUnknownPointer() {
return pUnknown;
}
public void release() {
if (this.iDispatch != null)
this.iDispatch.Release();
Ole32.INSTANCE.CoUninitialize();
}
}
@@ -1,3 +1,15 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import java.util.ArrayList;
@@ -7,348 +19,213 @@ import com.sun.jna.platform.win32.Advapi32;
import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.Advapi32Util.EnumKey;
import com.sun.jna.platform.win32.Advapi32Util.InfoKey;
import com.sun.jna.platform.win32.Kernel32Util;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.platform.win32.W32Errors;
import com.sun.jna.platform.win32.Win32Exception;
import com.sun.jna.platform.win32.WinError;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WinNT;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.platform.win32.WinReg;
import com.sun.jna.platform.win32.WinReg.HKEYByReference;
import com.sun.jna.ptr.IntByReference;
// TODO: Auto-generated Javadoc
/**
* The Class COMUtils.
*
* @author wolf.tobias@gmx.net The Class COMUtils.
*/
public abstract class COMUtils {
/** The Constant CO_E_NOTINITIALIZED. */
public static final int S_OK = 0, S_FALSE = 1,
REGDB_E_CLASSNOTREG = 0x80040154,
CLASS_E_NOAGGREGATION = 0x80040110,
CO_E_NOTINITIALIZED = 0x800401F0;
/** The Constant CO_E_NOTINITIALIZED. */
public static final int S_OK = 0;
/** The Constant E_UNEXPECTED. */
public static final int E_UNEXPECTED = 0x8000FFFF;
/**
* Succeeded.
*
* @param hr
* the hr
* @return true, if successful
*/
public static boolean SUCCEEDED(HRESULT hr) {
return SUCCEEDED(hr.intValue());
}
/** The Constant E_NOTIMPL. */
public static final int E_NOTIMPL = 0x80004001;
/**
* Succeeded.
*
* @param hr
* the hr
* @return true, if successful
*/
public static boolean SUCCEEDED(int hr) {
if (hr == S_OK)
return true;
else
return false;
}
/** The Constant E_OUTOFMEMORY. */
public static final int E_OUTOFMEMORY = 0x8007000E;
/**
* Failed.
*
* @param hr
* the hr
* @return true, if successful
*/
public static boolean FAILED(HRESULT hr) {
return FAILED(hr.intValue());
}
/** The Constant E_INVALIDARG. */
public static final int E_INVALIDARG = 0x80070057;
/**
* Failed.
*
* @param hr
* the hr
* @return true, if successful
*/
public static boolean FAILED(int hr) {
if (hr != S_OK)
return true;
else
return false;
}
/** The Constant E_NOINTERFACE. */
public static final int E_NOINTERFACE = 0x80004002;
/**
* Throw new exception.
*
* @param hr
* the hr
*/
public static void checkRC(HRESULT hr) {
checkRC(hr, null, null);
}
/** The Constant E_POINTER. */
public static final int E_POINTER = 0x80004003;
/**
* Throw new exception.
*
* @param hr
* the hr
* @param pExcepInfo
* the excep info
* @param puArgErr
* the pu arg err
*/
public static void checkRC(HRESULT hr, EXCEPINFO pExcepInfo,
IntByReference puArgErr) {
if (FAILED(hr)) {
String formatMessageFromHR = Kernel32Util.formatMessage(hr);
throw new COMException(formatMessageFromHR, pExcepInfo, puArgErr);
}
}
/** The Constant E_HANDLE. */
public static final int E_HANDLE = 0x80070006;
/**
* Gets the all com info on system.
*
* @return the all com info on system
*/
public static ArrayList<COMInfo> getAllCOMInfoOnSystem() {
HKEYByReference phkResult = new HKEYByReference();
HKEYByReference phkResult2 = new HKEYByReference();
String subKey;
ArrayList<COMInfo> comInfos = new ArrayList<COMUtils.COMInfo>();
/** The Constant E_ABORT. */
public static final int E_ABORT = 0x80004004;
try {
// open root key
phkResult = Advapi32Util.registryGetKey(WinReg.HKEY_CLASSES_ROOT,
"CLSID", WinNT.KEY_ALL_ACCESS);
// open subkey
InfoKey infoKey = Advapi32Util.registryQueryInfoKey(
phkResult.getValue(), WinNT.KEY_ALL_ACCESS);
/** The Constant E_FAIL. */
public static final int E_FAIL = 0x80004005;
for (int i = 0; i < infoKey.lpcSubKeys.getValue(); i++) {
EnumKey enumKey = Advapi32Util.registryRegEnumKey(
phkResult.getValue(), i);
subKey = Native.toString(enumKey.lpName);
/** The Constant E_ACCESSDENIED. */
public static final int E_ACCESSDENIED = 0x80070005;
COMInfo comInfo = new COMInfo(subKey);
/** The Constant DISP_E_BADVARTYPE. */
public static final int DISP_E_BADVARTYPE = -2147352568;
phkResult2 = Advapi32Util.registryGetKey(phkResult.getValue(),
subKey, WinNT.KEY_ALL_ACCESS);
InfoKey infoKey2 = Advapi32Util.registryQueryInfoKey(
phkResult2.getValue(), WinNT.KEY_ALL_ACCESS);
/** The Constant DISP_E_NOTACOLLECTION. */
public static final int DISP_E_NOTACOLLECTION = -2147352559;
for (int y = 0; y < infoKey2.lpcSubKeys.getValue(); y++) {
EnumKey enumKey2 = Advapi32Util.registryRegEnumKey(
phkResult2.getValue(), y);
String subKey2 = Native.toString(enumKey2.lpName);
/** The Constant DISP_E_MEMBERNOTFOUND. */
public static final int DISP_E_MEMBERNOTFOUND = -2147352573;
if (subKey2.equals("InprocHandler32")) {
comInfo.inprocHandler32 = (String) Advapi32Util
.registryGetValue(phkResult2.getValue(),
subKey2, null);
} else if (subKey2.equals("InprocServer32")) {
comInfo.inprocServer32 = (String) Advapi32Util
.registryGetValue(phkResult2.getValue(),
subKey2, null);
} else if (subKey2.equals("LocalServer32")) {
comInfo.localServer32 = (String) Advapi32Util
.registryGetValue(phkResult2.getValue(),
subKey2, null);
} else if (subKey2.equals("ProgID")) {
comInfo.progID = (String) Advapi32Util
.registryGetValue(phkResult2.getValue(),
subKey2, null);
} else if (subKey2.equals("TypeLib")) {
comInfo.typeLib = (String) Advapi32Util
.registryGetValue(phkResult2.getValue(),
subKey2, null);
}
}
/** The Constant DISP_E_ARRAYISLOCKED. */
public static final int DISP_E_ARRAYISLOCKED = -2147352563;
Advapi32.INSTANCE.RegCloseKey(phkResult2.getValue());
comInfos.add(comInfo);
}
} finally {
Advapi32.INSTANCE.RegCloseKey(phkResult.getValue());
Advapi32.INSTANCE.RegCloseKey(phkResult2.getValue());
}
/** The Constant DISP_E_EXCEPTION. */
public static final int DISP_E_EXCEPTION = -2147352567;
return comInfos;
}
/** The Constant DISP_E_TYPEMISMATCH. */
public static final int DISP_E_TYPEMISMATCH = -2147352571;
/**
* The Class COMInfo.
*
* @author wolf.tobias@gmx.net The Class COMInfo.
*/
public static class COMInfo {
/** The Constant DISP_E_BADINDEX. */
public static final int DISP_E_BADINDEX = -2147352565;
/** The clsid. */
public String clsid;
/** The Constant DISP_E_BADCALLEE. */
public static final int DISP_E_BADCALLEE = -2147352560;
/** The inproc handler32. */
public String inprocHandler32;
/** The Constant DISP_E_OVERFLOW. */
public static final int DISP_E_OVERFLOW = -2147352566;
/** The inproc server32. */
public String inprocServer32;
/** The Constant DISP_E_UNKNOWNINTERFACE. */
public static final int DISP_E_UNKNOWNINTERFACE = -2147352575;
/** The local server32. */
public String localServer32;
/** The Constant DISP_E_DIVBYZERO. */
public static final int DISP_E_DIVBYZERO = -2147352558;
/** The prog id. */
public String progID;
/** The Constant DISP_E_UNKNOWNLCID. */
public static final int DISP_E_UNKNOWNLCID = -2147352564;
/** The type lib. */
public String typeLib;
/** The Constant DISP_E_PARAMNOTOPTIONAL. */
public static final int DISP_E_PARAMNOTOPTIONAL = -2147352561;
/**
* Instantiates a new cOM info.
*/
public COMInfo() {
}
/** The Constant DISP_E_PARAMNOTFOUND. */
public static final int DISP_E_PARAMNOTFOUND = -2147352572;
/** The Constant DISP_E_BADPARAMCOUNT. */
public static final int DISP_E_BADPARAMCOUNT = -2147352562;
/** The Constant DISP_E_BUFFERTOOSMALL. */
public static final int DISP_E_BUFFERTOOSMALL = -2147352557;
/** The Constant DISP_E_UNKNOWNNAME. */
public static final int DISP_E_UNKNOWNNAME = -2147352570;
/** The Constant DISP_E_NONAMEDARGS. */
public static final int DISP_E_NONAMEDARGS = -2147352569;
/** The Constant CO_E_OBJNOTCONNECTED. */
public static final int CO_E_OBJNOTCONNECTED = -2147220995;
/**
* Succeeded.
*
* @param hr
* the hr
* @return true, if successful
*/
public static boolean SUCCEEDED(HRESULT hr) {
return SUCCEEDED(hr.intValue());
}
/**
* Succeeded.
*
* @param hr
* the hr
* @return true, if successful
*/
public static boolean SUCCEEDED(int hr) {
if (hr == S_OK)
return true;
else
return false;
}
/**
* Failed.
*
* @param hr
* the hr
* @return true, if successful
*/
public static boolean FAILED(HRESULT hr) {
return FAILED(hr.intValue());
}
/**
* Failed.
*
* @param hr
* the hr
* @return true, if successful
*/
public static boolean FAILED(int hr) {
if (hr != S_OK)
return true;
else
return false;
}
/**
* Throw new exception.
*
* @param hr
* the hr
*/
public static void checkAutoRC(HRESULT hr) {
checkAutoRC(hr, null, null);
}
/**
* Throw new exception.
*
* @param hr
* the hr
* @param pExcepInfo
* the excep info
* @param puArgErr
* the pu arg err
*/
public static void checkAutoRC(HRESULT hr, EXCEPINFO pExcepInfo,
IntByReference puArgErr) {
switch (hr.intValue()) {
case S_OK:
return;
case E_NOTIMPL:
throw new COMException("Not implemented!");
case E_INVALIDARG:
throw new COMException("Invalid argument!");
case E_OUTOFMEMORY:
throw new COMException("Out of memory!");
case E_UNEXPECTED:
throw new COMException("Error "
+ Integer.toHexString(hr.intValue()));
case CO_E_NOTINITIALIZED:
throw new COMException("CoInitialized wasn't called!");
case E_NOINTERFACE:
throw new COMException("Interface does not inherit from class!");
case E_POINTER:
throw new COMException("Allocated pointer pointer is null!");
case DISP_E_UNKNOWNNAME:
throw new COMException(
"One or more of the names were not known. The returned array of DISPIDs contains DISPID_UNKNOWN for each entry that corresponds to an unknown name!");
case DISP_E_UNKNOWNLCID:
throw new COMException(
"The locale identifier (LCID) was not recognized!");
case DISP_E_BADPARAMCOUNT:
throw new COMException(
"The number of elements provided to DISPPARAMS is different from the number of arguments accepted by the method or property!");
case DISP_E_BADVARTYPE:
throw new COMException(
"One of the arguments in DISPPARAMS is not a valid variant type!");
case DISP_E_EXCEPTION:
throw new COMException(
"The application needs to raise an exception. In this case, the structure passed in pexcepinfo should be filled in!",
pExcepInfo, puArgErr);
case DISP_E_MEMBERNOTFOUND:
throw new COMException("The requested member does not exist!");
case DISP_E_NONAMEDARGS:
throw new COMException(
"This implementation of IDispatch does not support named arguments!");
case DISP_E_OVERFLOW:
throw new COMException(
"One of the arguments in DISPPARAMS could not be coerced to the specified type!");
case DISP_E_PARAMNOTFOUND:
throw new COMException(
"One of the parameter IDs does not correspond to a parameter on the method. In this case, puArgErr is set to the first argument that contains the error!",
pExcepInfo, puArgErr);
case DISP_E_TYPEMISMATCH:
throw new COMException(
"One or more of the arguments could not be coerced. The index of the first parameter with the incorrect type within rgvarg is returned in puArgErr!",
pExcepInfo, puArgErr);
case DISP_E_UNKNOWNINTERFACE:
throw new COMException(
"The interface identifier passed in riid is not IID_NULL!");
case CO_E_OBJNOTCONNECTED:
throw new COMException(
"The method is not connected to the Dispatch pointer!");
default:
throw new COMException("Unexpected COM error code : "
+ toHexStr(hr));
}
}
public static void checkTypeLibRC(HRESULT hr) {
switch (hr.intValue()) {
case S_OK:
return;
case WinError.E_INVALIDARG:
throw new COMException("One or more of the arguments is not valid.");
case WinError.E_OUTOFMEMORY:
throw new COMException(
"Insufficient memory to complete the operation.");
case WinError.TYPE_E_IOERROR:
throw new COMException("The function could not write to the file.");
case WinError.TYPE_E_INVALIDSTATE:
throw new COMException("The type library could not be opened.");
case WinError.TYPE_E_INVDATAREAD:
throw new COMException(
"The function could not read from the file. ");
case WinError.TYPE_E_UNSUPFORMAT:
throw new COMException("The type library has an older format.");
case WinError.TYPE_E_UNKNOWNLCID:
throw new COMException(
"The LCID could not be found in the OLE-supported DLLs.");
case WinError.TYPE_E_CANTLOADLIBRARY:
throw new COMException(
"The type library or DLL could not be loaded.");
case WinError.TYPE_E_ELEMENTNOTFOUND:
throw new COMException(
"No type description was found in the library with the specified GUID.");
default:
throw new COMException("Unexpected Typelib error code : "
+ toHexStr(hr));
}
}
public static ArrayList<COMInfo> getAllCOMInfoOnSystem() {
HKEYByReference phkResult = new HKEYByReference();
HKEYByReference phkResult2 = new HKEYByReference();
String subKey;
ArrayList<COMInfo> comInfos = new ArrayList<COMUtils.COMInfo>();
try {
// open root key
phkResult = Advapi32Util.registryGetKey(WinReg.HKEY_CLASSES_ROOT, "CLSID", WinNT.KEY_ALL_ACCESS);
// open subkey
InfoKey infoKey = Advapi32Util.registryQueryInfoKey(phkResult.getValue(), WinNT.KEY_ALL_ACCESS);
for (int i = 0; i < infoKey.lpcSubKeys.getValue(); i++) {
EnumKey enumKey = Advapi32Util.registryRegEnumKey(phkResult.getValue(), i);
subKey = Native.toString(enumKey.lpName);
COMInfo comInfo = new COMInfo(subKey);
phkResult2 = Advapi32Util.registryGetKey(phkResult.getValue(), subKey, WinNT.KEY_ALL_ACCESS);
InfoKey infoKey2 = Advapi32Util.registryQueryInfoKey(phkResult2.getValue(), WinNT.KEY_ALL_ACCESS);
for (int y = 0; y < infoKey2.lpcSubKeys.getValue(); y++)
{
EnumKey enumKey2 = Advapi32Util.registryRegEnumKey(phkResult2.getValue(), y);
String subKey2 = Native.toString(enumKey2.lpName);
if(subKey2.equals("InprocHandler32")) {
comInfo.inprocHandler32 = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
}else if(subKey2.equals("InprocServer32")) {
comInfo.inprocServer32 = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
}else if(subKey2.equals("LocalServer32")) {
comInfo.localServer32 = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
}else if(subKey2.equals("ProgID")) {
comInfo.progID = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
}else if(subKey2.equals("TypeLib")) {
comInfo.typeLib = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
}
}
Advapi32.INSTANCE.RegCloseKey(phkResult2.getValue());
comInfos.add(comInfo);
}
} finally {
Advapi32.INSTANCE.RegCloseKey(phkResult.getValue());
Advapi32.INSTANCE.RegCloseKey(phkResult2.getValue());
}
return comInfos;
}
public static class COMInfo {
public String clsid;
public String inprocHandler32;
public String inprocServer32;
public String localServer32;
public String progID;
public String typeLib;
public COMInfo() {
}
public COMInfo(String clsid) {
this.clsid = clsid;
}
}
private static String toHexStr(HRESULT hr) {
return "0x" + Integer.toHexString(hr.intValue()).toUpperCase();
}
/**
* Instantiates a new cOM info.
*
* @param clsid
* the clsid
*/
public COMInfo(String clsid) {
this.clsid = clsid;
}
}
}
@@ -0,0 +1,137 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid.IID;
import com.sun.jna.platform.win32.OaIdl.DISPID;
import com.sun.jna.platform.win32.OaIdl.DISPIDByReference;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WinDef.LCID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.UINTByReference;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the IDispatch interface
*
* IDispatch.GetTypeInfoCount 12 IDispatch.GetTypeInfo 16
* IDispatch.GetIDsOfNames 20 IDispatch.Invoke 24
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class Dispatch extends Unknown implements IDispatch {
public static class ByReference extends Dispatch implements
Structure.ByReference {
}
public Dispatch() {
}
public Dispatch(Pointer pvInstance) {
super(pvInstance);
}
/**
* Gets the type info count.
*
* @param pctinfo
* the pctinfo
* @return the hresult
*
* Virtual
*/
public HRESULT GetTypeInfoCount(UINTByReference pctinfo) {
return (HRESULT) this._invokeNativeObject(3,
new Object[] { this.getPointer(), pctinfo }, HRESULT.class);
}
/**
* Gets the type info.
*
* @param iTInfo
* the i t info
* @param lcid
* the lcid
* @param ppTInfo
* the pp t info
* @return the hresult
*/
public HRESULT GetTypeInfo(UINT iTInfo, LCID lcid,
PointerByReference ppTInfo) {
return (HRESULT) this._invokeNativeObject(4,
new Object[] { this.getPointer(), iTInfo, lcid, ppTInfo },
HRESULT.class);
}
/**
* Gets the ids of names.
*
* @param riid
* the riid
* @param rgszNames
* the rgsz names
* @param cNames
* the c names
* @param lcid
* the lcid
* @param rgDispId
* the rg disp id
* @return the hresult
*/
public HRESULT GetIDsOfNames(IID riid, WString[] rgszNames, int cNames,
LCID lcid, DISPIDByReference rgDispId) {
return (HRESULT) this._invokeNativeObject(5,
new Object[] { this.getPointer(), riid, rgszNames, cNames,
lcid, rgDispId }, HRESULT.class);
}
/**
* Invoke.
*
* @param dispIdMember
* the disp id member
* @param riid
* the riid
* @param lcid
* the lcid
* @param wFlags
* the w flags
* @param pDispParams
* the disp params
* @param pVarResult
* the var result
* @param pExcepInfo
* the excep info
* @param puArgErr
* the pu arg err
* @return the hresult
*/
public HRESULT Invoke(DISPID dispIdMember, IID riid, LCID lcid,
DISPID wFlags, DISPPARAMS pDispParams,
VARIANT.ByReference pVarResult, EXCEPINFO.ByReference pExcepInfo,
IntByReference puArgErr) {
return (HRESULT) this
._invokeNativeObject(6, new Object[] { this.getPointer(),
dispIdMember, riid, lcid, wFlags, pDispParams,
pVarResult, pExcepInfo, puArgErr }, HRESULT.class);
}
}
@@ -12,9 +12,6 @@
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Function;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid.IID;
import com.sun.jna.platform.win32.OaIdl.DISPID;
@@ -24,10 +21,12 @@ import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WinDef.LCID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.UINTByReference;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the IDispatch interface
*
@@ -36,129 +35,21 @@ import com.sun.jna.ptr.PointerByReference;
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class IDispatch extends IUnknown {
public interface IDispatch extends IUnknown {
/**
* The Class ByReference.
*/
public static class ByReference extends IDispatch implements
Structure.ByReference {
}
public final static IID IID_IDISPATCH = new IID(
"00020400-0000-0000-C000-000000000046");
/** The Constant IID_IDispatch. */
public final static IID IID_IDispatch = new IID(
"00020400-0000-0000-C000-000000000046");
public HRESULT GetTypeInfoCount(UINTByReference pctinfo);
/**
* Instantiates a new i dispatch.
*/
public IDispatch() {
}
/**
* Instantiates a new i dispatch.
*
* @param pvInstance
* the pv instance
*/
public IDispatch(Pointer pvInstance) {
super(pvInstance);
}
/**
* Gets the type info count.
*
* @param pctinfo
* the pctinfo
* @return the hresult
*/
public HRESULT GetTypeInfoCount(IntByReference pctinfo) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(12));
int hr = func.invokeInt(new Object[] { this.getPointer(), pctinfo });
return new HRESULT(hr);
}
/**
* Gets the type info.
*
* @param iTInfo
* the i t info
* @param lcid
* the lcid
* @param ppTInfo
* the pp t info
* @return the hresult
*/
public HRESULT GetTypeInfo(UINT iTInfo, LCID lcid,
PointerByReference ppTInfo) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(16));
int hr = func.invokeInt(new Object[] { this.getPointer(), iTInfo, lcid,
ppTInfo });
PointerByReference ppTInfo);
return new HRESULT(hr);
}
/**
* Gets the i ds of names.
*
* @param riid
* the riid
* @param rgszNames
* the rgsz names
* @param cNames
* the c names
* @param lcid
* the lcid
* @param rgDispId
* the rg disp id
* @return the hresult
*/
public HRESULT GetIDsOfNames(IID riid, WString[] rgszNames, int cNames,
LCID lcid, DISPIDByReference rgDispId) {
LCID lcid, DISPIDByReference rgDispId);
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(20));
int hr = func.invokeInt(new Object[] { this.getPointer(), riid,
rgszNames, cNames, lcid, rgDispId });
return new HRESULT(hr);
}
/**
* Invoke.
*
* @param dispIdMember
* the disp id member
* @param riid
* the riid
* @param lcid
* the lcid
* @param wFlags
* the w flags
* @param pDispParams
* the disp params
* @param pVarResult
* the var result
* @param pExcepInfo
* the excep info
* @param puArgErr
* the pu arg err
* @return the hresult
*/
public HRESULT Invoke(DISPID dispIdMember, IID riid, LCID lcid,
DISPID wFlags, DISPPARAMS pDispParams,
VARIANT.ByReference pVarResult, EXCEPINFO.ByReference pExcepInfo,
IntByReference puArgErr) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(24));
int hr = func.invokeInt(new Object[] { this.getPointer(), dispIdMember,
riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo,
puArgErr });
return new HRESULT(hr);
}
DISPID wFlags, DISPPARAMS pDispParams,
VARIANT.ByReference pVarResult, EXCEPINFO.ByReference pExcepInfo,
IntByReference puArgErr);
}
@@ -12,7 +12,6 @@
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Pointer;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid.GUID;
import com.sun.jna.platform.win32.Guid.IID;
@@ -23,260 +22,73 @@ import com.sun.jna.platform.win32.WinDef.PVOID;
import com.sun.jna.platform.win32.WinDef.ULONG;
import com.sun.jna.platform.win32.WinNT.HRESULT;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the IRecordInfo interface
* Wrapper class for the IRecordInfo interface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class IRecordInfo extends IUnknown {
public interface IRecordInfo extends IUnknown {
/** The Constant IID_IRecordInfo. */
public final static IID IID_IRecordInfo = new IID(
"{0000002F-0000-0000-C000-000000000046}");
public final static IID IID_IRecordInfo = new IID(
"{0000002F-0000-0000-C000-000000000046}");
/**
* Instantiates a new i record info.
*/
public IRecordInfo() {
}
public HRESULT RecordInit(/* [out] */PVOID pvNew);
/**
* Instantiates a new i record info.
*
* @param pvInstance
* the pv instance
*/
public IRecordInfo(Pointer pvInstance) {
super(pvInstance);
}
public HRESULT RecordClear(
/* [in] */PVOID pvExisting);
/**
* Record init.
*
* @param pvNew
* the pv new
* @return the hresult
*/
public HRESULT RecordInit(/* [out] */PVOID pvNew) {
return null;
}
public HRESULT RecordCopy(/* [in] */PVOID pvExisting,
/* [out] */PVOID pvNew);
/**
* Record clear.
*
* @param pvExisting
* the pv existing
* @return the hresult
*/
public HRESULT RecordClear(
/* [in] */PVOID pvExisting) {
return null;
}
public HRESULT GetGuid(
/* [out] */GUID pguid);
/**
* Record copy.
*
* @param pvExisting
* the pv existing
* @param pvNew
* the pv new
* @return the hresult
*/
public HRESULT RecordCopy(
/* [in] */PVOID pvExisting,
/* [out] */PVOID pvNew) {
return null;
}
public HRESULT GetName(
/* [out] */BSTR pbstrName);
/**
* Gets the guid.
*
* @param pguid
* the pguid
* @return the hresult
*/
public HRESULT GetGuid(
/* [out] */GUID pguid) {
return null;
}
public HRESULT GetSize(
/* [out] */ULONG pcbSize);
/**
* Gets the name.
*
* @param pbstrName
* the pbstr name
* @return the hresult
*/
public HRESULT GetName(
/* [out] */BSTR pbstrName) {
return null;
}
public HRESULT GetTypeInfo(
/* [out] */ITypeInfo ppTypeInfo);
/**
* Gets the size.
*
* @param pcbSize
* the pcb size
* @return the hresult
*/
public HRESULT GetSize(
/* [out] */ULONG pcbSize) {
return null;
}
public HRESULT GetField(
/* [in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [out] */VARIANT pvarField);
/**
* Gets the type info.
*
* @param ppTypeInfo
* the pp type info
* @return the hresult
*/
public HRESULT GetTypeInfo(
/* [out] */ITypeInfo ppTypeInfo) {
return null;
}
public HRESULT GetFieldNoCopy(
/* [in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [out] */VARIANT pvarField,
/* [out] */PVOID ppvDataCArray);
/**
* Gets the field.
*
* @param pvData
* the pv data
* @param szFieldName
* the sz field name
* @param pvarField
* the pvar field
* @return the hresult
*/
public HRESULT GetField(
/* [in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [out] */VARIANT pvarField) {
return null;
}
public HRESULT PutField(
/* [in] */ULONG wFlags,
/* [out][in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [in] */VARIANT pvarField);
/**
* Gets the field no copy.
*
* @param pvData
* the pv data
* @param szFieldName
* the sz field name
* @param pvarField
* the pvar field
* @param ppvDataCArray
* the ppv data c array
* @return the hresult
*/
public HRESULT GetFieldNoCopy(
/* [in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [out] */VARIANT pvarField,
/* [out] */PVOID ppvDataCArray) {
return null;
}
public HRESULT PutFieldNoCopy(
/* [in] */ULONG wFlags,
/* [out][in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [in] */VARIANT pvarField);
/**
* Put field.
*
* @param wFlags
* the w flags
* @param pvData
* the pv data
* @param szFieldName
* the sz field name
* @param pvarField
* the pvar field
* @return the hresult
*/
public HRESULT PutField(
/* [in] */ULONG wFlags,
/* [out][in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [in] */VARIANT pvarField) {
return null;
}
public HRESULT GetFieldNames(
/* [out][in] */ULONG pcNames,
/* [length_is][size_is][out] */BSTR rgBstrNames);
/**
* Put field no copy.
*
* @param wFlags
* the w flags
* @param pvData
* the pv data
* @param szFieldName
* the sz field name
* @param pvarField
* the pvar field
* @return the hresult
*/
public HRESULT PutFieldNoCopy(
/* [in] */ULONG wFlags,
/* [out][in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [in] */VARIANT pvarField) {
return null;
}
public BOOL IsMatchingType(
/* [in] */IRecordInfo pRecordInfo);
/**
* Gets the field names.
*
* @param pcNames
* the pc names
* @param rgBstrNames
* the rg bstr names
* @return the hresult
*/
public HRESULT GetFieldNames(
/* [out][in] */ULONG pcNames,
/* [length_is][size_is][out] */BSTR rgBstrNames) {
return null;
}
public PVOID RecordCreate();
/**
* Checks if is matching type.
*
* @param pRecordInfo
* the record info
* @return the bool
*/
public BOOL IsMatchingType(
/* [in] */IRecordInfo pRecordInfo) {
return null;
}
public HRESULT RecordCreateCopy(
/* [in] */PVOID pvSource,
/* [out] */PVOID ppvDest);
/**
* Record create.
*
* @return the pvoid
*/
public PVOID RecordCreate() {
return null;
}
/**
* Record create copy.
*
* @param pvSource
* the pv source
* @param ppvDest
* the ppv dest
* @return the hresult
*/
public HRESULT RecordCreateCopy(
/* [in] */PVOID pvSource,
/* [out] */PVOID ppvDest) {
return null;
}
/**
* Record destroy.
*
* @param pvRecord
* the pv record
* @return the hresult
*/
public HRESULT RecordDestroy(
/* [in] */PVOID pvRecord) {
return null;
}
public HRESULT RecordDestroy(
/* [in] */PVOID pvRecord);
}
@@ -12,63 +12,35 @@
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Function;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.OaIdl.BINDPTR;
import com.sun.jna.platform.win32.OaIdl.DESCKIND;
import com.sun.jna.platform.win32.WinDef.ULONG;
import com.sun.jna.platform.win32.WinDef.WORD;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the ITypeComp interface
* Wrapper class for the ITypeComp interface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class ITypeComp extends IUnknown {
public interface ITypeComp extends IUnknown {
public static class ByReference extends ITypeComp implements
Structure.ByReference {
}
public HRESULT Bind(
/* [annotation][in] */
WString szName,
/* [in] */ULONG lHashVal,
/* [in] */WORD wFlags,
/* [out] */PointerByReference ppTInfo,
/* [out] */DESCKIND.ByReference pDescKind,
/* [out] */BINDPTR.ByReference pBindPtr);
public ITypeComp() {
}
public ITypeComp(Pointer pvInstance) {
super(pvInstance);
}
public HRESULT Bind(
/* [annotation][in] */
WString szName,
/* [in] */ULONG lHashVal,
/* [in] */WORD wFlags,
/* [out] */ITypeInfo.ByReference ppTInfo,
/* [out] */DESCKIND.ByReference pDescKind,
/* [out] */BINDPTR.ByReference pBindPtr) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(12));
int hr = func.invokeInt(new Object[] { this.getPointer(), szName,
lHashVal, wFlags, ppTInfo, pDescKind, pBindPtr });
return new HRESULT(hr);
}
public HRESULT BindType(
/* [annotation][in] */
WString szName,
/* [in] */ULONG lHashVal,
/* [out] */ITypeInfo.ByReference ppTInfo,
/* [out] */ITypeComp.ByReference ppTComp) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(16));
int hr = func.invokeInt(new Object[] { this.getPointer(), szName,
lHashVal, ppTInfo, ppTComp });
return new HRESULT(hr);
}
public HRESULT BindType(
/* [annotation][in] */
WString szName,
/* [in] */ULONG lHashVal,
/* [out] */PointerByReference ppTInfo,
/* [out] */PointerByReference ppTComp);
}
@@ -12,24 +12,21 @@
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Function;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid.REFIID;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.OaIdl.HREFTYPE;
import com.sun.jna.platform.win32.OaIdl.HREFTYPEByReference;
import com.sun.jna.platform.win32.OaIdl.HREFTYPEByReference;
import com.sun.jna.platform.win32.OaIdl.INVOKEKIND;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.MEMBERIDByReference;
import com.sun.jna.platform.win32.OaIdl.TYPEATTR;
import com.sun.jna.platform.win32.OaIdl.VARDESC;
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WTypes.BSTRByReference;
import com.sun.jna.platform.win32.WTypes.LPOLESTR;
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
import com.sun.jna.platform.win32.WinDef.PVOID;
import com.sun.jna.platform.win32.WinDef.UINT;
@@ -40,254 +37,98 @@ import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the ITypeInfo interface
*
* Wrapper class for the ITypeInfo interface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class ITypeInfo extends IUnknown {
public interface ITypeInfo extends IUnknown {
public static class ByReference extends ITypeInfo implements
Structure.ByReference {
}
public HRESULT GetTypeAttr(
/* [out] */PointerByReference ppTypeAttr);
public ITypeInfo() {
}
public HRESULT GetTypeComp(
/* [out] */PointerByReference ppTComp);
public ITypeInfo(Pointer pvInstance) {
super(pvInstance);
}
public/* [local] */HRESULT GetFuncDesc(
/* [in] */UINT index,
/* [out] */PointerByReference ppFuncDesc);
public HRESULT GetTypeAttr(
/* [out] */TYPEATTR.ByReference pTypeAttr) {
public/* [local] */HRESULT GetVarDesc(
/* [in] */UINT index,
/* [out] */PointerByReference ppVarDesc);
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(12));
int hr = func.invokeInt(new Object[] { this.getPointer(), pTypeAttr });
pTypeAttr.read();
public/* [local] */HRESULT GetNames(
/* [in] */MEMBERID memid,
/* [length_is][size_is][out] */BSTR[] rgBstrNames,
/* [in] */UINT cMaxNames,
/* [out] */UINTByReference pcNames);
return new HRESULT(hr);
}
public HRESULT GetRefTypeOfImplType(
/* [in] */UINT index,
/* [out] */HREFTYPEByReference pRefType);
public HRESULT GetTypeComp(
/* [out] */ITypeComp.ByReference pTComp) {
public HRESULT GetImplTypeFlags(
/* [in] */UINT index,
/* [out] */IntByReference pImplTypeFlags);
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(16));
PointerByReference ppTComp = new PointerByReference();
int hr = func.invokeInt(new Object[] { this.getPointer(), ppTComp });
pTComp.setPointer(ppTComp.getValue());
public/* [local] */HRESULT GetIDsOfNames(
/* [size_is][in] */LPOLESTR[] rgszNames,
/* [in] */UINT cNames,
/* [size_is][out] */MEMBERID[] pMemId);
return new HRESULT(hr);
}
public/* [local] */HRESULT Invoke(
/* [in] */PVOID pvInstance,
/* [in] */MEMBERID memid,
/* [in] */WORD wFlags,
/* [out][in] */DISPPARAMS.ByReference pDispParams,
/* [out] */VARIANT.ByReference pVarResult,
/* [out] */EXCEPINFO.ByReference pExcepInfo,
/* [out] */UINTByReference puArgErr);
public/* [local] */HRESULT GetFuncDesc(
/* [in] */UINT index,
/* [out] */FUNCDESC.ByReference pFuncDesc) {
public/* [local] */HRESULT GetDocumentation(
/* [in] */MEMBERID memid,
/* [out] */BSTRByReference pBstrName,
/* [out] */BSTRByReference pBstrDocString,
/* [out] */DWORDByReference pdwHelpContext,
/* [out] */BSTRByReference pBstrHelpFile);
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(20));
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
pFuncDesc });
public/* [local] */HRESULT GetDllEntry(
/* [in] */MEMBERID memid,
/* [in] */INVOKEKIND invKind,
/* [out] */BSTRByReference pBstrDllName,
/* [out] */BSTRByReference pBstrName,
/* [out] */WORDByReference pwOrdinal);
return new HRESULT(hr);
}
public HRESULT GetRefTypeInfo(
/* [in] */HREFTYPE hRefType,
/* [out] */PointerByReference ppTInfo);
public/* [local] */HRESULT GetVarDesc(
/* [in] */UINT index,
/* [out] */VARDESC.ByReference pVarDesc) {
public/* [local] */HRESULT AddressOfMember(
/* [in] */MEMBERID memid,
/* [in] */INVOKEKIND invKind,
/* [out] */PointerByReference ppv);
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(24));
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
pVarDesc });
public/* [local] */HRESULT CreateInstance(
/* [in] */IUnknown pUnkOuter,
/* [in] */REFIID riid,
/* [iid_is][out] */PointerByReference ppvObj);
return new HRESULT(hr);
}
public HRESULT GetMops(
/* [in] */MEMBERID memid,
/* [out] */BSTRByReference pBstrMops);
public/* [local] */HRESULT GetNames(
/* [in] */MEMBERID memid,
/* [length_is][size_is][out] */BSTR[] rgBstrNames,
/* [in] */UINT cMaxNames,
/* [out] */UINTByReference pcNames) {
public/* [local] */HRESULT GetContainingTypeLib(
/* [out] */PointerByReference ppTLib,
/* [out] */UINTByReference pIndex);
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(28));
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
rgBstrNames, cMaxNames, pcNames });
public/* [local] */void ReleaseTypeAttr(
/* [in] */TYPEATTR pTypeAttr);
return new HRESULT(hr);
}
public/* [local] */void ReleaseFuncDesc(
/* [in] */FUNCDESC pFuncDesc);
public HRESULT GetRefTypeOfImplType(
/* [in] */UINT index,
/* [out] */HREFTYPEByReference pRefType) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(32));
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
pRefType });
return new HRESULT(hr);
}
public HRESULT GetImplTypeFlags(
/* [in] */UINT index,
/* [out] */IntByReference pImplTypeFlags) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(36));
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
pImplTypeFlags });
return new HRESULT(hr);
}
public/* [local] */HRESULT GetIDsOfNames(
/* [size_is][in] */WString[] rgszNames,
/* [in] */UINT cNames,
/* [size_is][out] */MEMBERID[] pMemId) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(40));
int hr = func.invokeInt(new Object[] { this.getPointer(), rgszNames,
cNames, pMemId });
return new HRESULT(hr);
}
public/* [local] */HRESULT Invoke(
/* [in] */PVOID pvInstance,
/* [in] */MEMBERID memid,
/* [in] */WORD wFlags,
/* [out][in] */DISPPARAMS.ByReference pDispParams,
/* [out] */VARIANT.ByReference pVarResult,
/* [out] */EXCEPINFO.ByReference pExcepInfo,
/* [out] */UINTByReference puArgErr) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(44));
int hr = func.invokeInt(new Object[] { this.getPointer(), pvInstance,
memid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr });
return new HRESULT(hr);
}
public/* [local] */HRESULT GetDocumentation(
/* [in] */MEMBERID memid,
/* [out] */BSTR pBstrName,
/* [out] */BSTR pBstrDocString,
/* [out] */DWORDByReference pdwHelpContext,
/* [out] */BSTR pBstrHelpFile) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(48));
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile });
return new HRESULT(hr);
}
public/* [local] */HRESULT GetDllEntry(
/* [in] */MEMBERID memid,
/* [in] */INVOKEKIND invKind,
/* [out] */BSTR pBstrDllName,
/* [out] */BSTR pBstrName,
/* [out] */WORDByReference pwOrdinal) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(52));
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
invKind, pBstrDllName, pBstrName, pwOrdinal });
return new HRESULT(hr);
}
public HRESULT GetRefTypeInfo(
/* [in] */HREFTYPE hRefType,
/* [out] */ITypeInfo.ByReference ppTInfo) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(56));
int hr = func.invokeInt(new Object[] { this.getPointer(), hRefType,
ppTInfo });
return new HRESULT(hr);
}
public/* [local] */HRESULT AddressOfMember(
/* [in] */MEMBERID memid,
/* [in] */INVOKEKIND invKind,
/* [out] */PointerByReference ppv) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(60));
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
invKind, ppv });
return new HRESULT(hr);
}
public/* [local] */HRESULT CreateInstance(
/* [in] */IUnknown pUnkOuter,
/* [in] */REFIID riid,
/* [iid_is][out] */PointerByReference ppvObj) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(64));
int hr = func.invokeInt(new Object[] { this.getPointer(), pUnkOuter,
riid, ppvObj });
return new HRESULT(hr);
}
public HRESULT GetMops(
/* [in] */MEMBERID memid,
/* [out] */BSTR pBstrMops) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(68));
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
pBstrMops });
return new HRESULT(hr);
}
public/* [local] */HRESULT GetContainingTypeLib(
/* [out] */ITypeLib.ByReference pTLib,
/* [out] */UINTByReference pIndex) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(72));
PointerByReference ppTLib = new PointerByReference();
int hr = func.invokeInt(new Object[] { this.getPointer(), ppTLib,
pIndex });
pTLib.setPointer(ppTLib.getPointer());
return new HRESULT(hr);
}
public/* [local] */void ReleaseTypeAttr(
/* [in] */TYPEATTR pTypeAttr) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(76));
func.invokeInt(new Object[] { this.getPointer(), pTypeAttr });
}
public/* [local] */void ReleaseFuncDesc(
/* [in] */FUNCDESC pFuncDesc) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(80));
func.invokeInt(new Object[] { this.getPointer(), pFuncDesc });
}
public/* [local] */void ReleaseVarDesc(
/* [in] */VARDESC pVarDesc) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(84));
func.invokeInt(new Object[] { this.getPointer(), pVarDesc });
}
public/* [local] */void ReleaseVarDesc(
/* [in] */VARDESC pVarDesc);
}
@@ -12,157 +12,68 @@
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Function;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid.GUID;
import com.sun.jna.platform.win32.OaIdl.MEMBERIDByReference;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TLIBATTR;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.OaIdl.TYPEKIND;
import com.sun.jna.platform.win32.WTypes.BSTRByReference;
import com.sun.jna.platform.win32.WTypes.LPOLESTR;
import com.sun.jna.platform.win32.WinDef.BOOLByReference;
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.ULONG;
import com.sun.jna.platform.win32.WinDef.USHORTByReference;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the ITypeLib interface
*
* Wrapper class for the ITypeLib interface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class ITypeLib extends IUnknown {
public interface ITypeLib extends IUnknown {
public static class ByReference extends IUnknown implements
Structure.ByReference {
}
public UINT GetTypeInfoCount();
public ITypeLib() {
}
public HRESULT GetTypeInfo(
/* [in] */UINT index,
/* [out] */PointerByReference pTInfo);
public ITypeLib(Pointer pvInstance) {
super(pvInstance);
}
public HRESULT GetTypeInfoType(
/* [in] */UINT index,
/* [out] */TYPEKIND.ByReference pTKind);
public UINT GetTypeInfoCount() {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(12));
int count = func.invokeInt(new Object[] { this.getPointer() });
public HRESULT GetTypeInfoOfGuid(
/* [in] */GUID guid,
/* [out] */PointerByReference pTinfo);
return new UINT(count);
}
public HRESULT GetLibAttr(
/* [out] */PointerByReference ppTLibAttr);
public HRESULT GetTypeInfo(
/* [in] */UINT index,
/* [out] */ITypeInfo.ByReference pTInfo) {
public HRESULT GetTypeComp(
/* [out] */PointerByReference ppTComp);
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(16));
PointerByReference ppTInfo = new PointerByReference();
int hr = func.invokeInt(new Object[] { this.getPointer(), index, ppTInfo });
pTInfo.setPointer(ppTInfo.getValue());
public HRESULT GetDocumentation(
/* [in] */int index,
/* [out] */BSTRByReference pBstrName,
/* [out] */BSTRByReference pBstrDocString,
/* [out] */DWORDByReference pdwHelpContext,
/* [out] */BSTRByReference pBstrHelpFile);
return new HRESULT(hr);
}
public HRESULT IsName(
/* [annotation][out][in] */
LPOLESTR szNameBuf,
/* [in] */ULONG lHashVal,
/* [out] */BOOLByReference pfName);
public HRESULT GetTypeInfoType(
/* [in] */UINT index,
/* [out] */IntByReference pTKind) {
public HRESULT FindName(
/* [annotation][out][in] */
BSTRByReference szNameBuf,
/* [in] */ULONG lHashVal,
/* [length_is][size_is][out] */ITypeInfo[] ppTInfo,
/* [length_is][size_is][out] */MEMBERID[] rgMemId,
/* [out][in] */USHORTByReference pcFound);
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(20));
int hr = func
.invokeInt(new Object[] { this.getPointer(), index, pTKind });
return new HRESULT(hr);
}
public HRESULT GetTypeInfoOfGuid(
/* [in] */GUID guid,
/* [out] */ITypeInfo.ByReference pTinfo) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(24));
PointerByReference ppTinfo = new PointerByReference();
int hr = func.invokeInt(new Object[] { this.getPointer(), guid, ppTinfo });
pTinfo.setPointer(ppTinfo.getPointer());
return new HRESULT(hr);
}
public HRESULT GetLibAttr(
/* [out] */TLIBATTR.ByReference ppTLibAttr) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(28));
int hr = func.invokeInt(new Object[] { this.getPointer(), ppTLibAttr });
return new HRESULT(hr);
}
public HRESULT GetTypeComp(
/* [out] */ITypeComp.ByReference pTComp) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(32));
PointerByReference ppTComp = new PointerByReference();
int hr = func.invokeInt(new Object[] { this.getPointer(), ppTComp });
pTComp.setPointer(ppTComp.getPointer());
return new HRESULT(hr);
}
public HRESULT GetDocumentation(
/* [in] */int index,
/* [out] */BSTR pBstrName,
/* [out] */BSTR pBstrDocString,
/* [out] */DWORDByReference pdwHelpContext,
/* [out] */BSTR pBstrHelpFile) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(36));
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile });
return new HRESULT(hr);
}
public HRESULT IsName(
/* [annotation][out][in] */
WString szNameBuf,
/* [in] */ULONG lHashVal,
/* [out] */BOOLByReference pfName) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(40));
int hr = func.invokeInt(new Object[] { this.getPointer(), szNameBuf,
lHashVal, pfName });
return new HRESULT(hr);
}
public HRESULT FindName(
/* [annotation][out][in] */
WString szNameBuf,
/* [in] */ULONG lHashVal,
/* [length_is][size_is][out] */ITypeInfo.ByReference ppTInfo,
/* [length_is][size_is][out] */MEMBERIDByReference rgMemId,
/* [out][in] */USHORTByReference pcFound) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(44));
int hr = func.invokeInt(new Object[] { this.getPointer(), szNameBuf,
lHashVal, ppTInfo, rgMemId, pcFound });
return new HRESULT(hr);
}
public void ReleaseTLibAttr(/* [in] */TLIBATTR pTLibAttr) {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(48));
func.invokeInt(new Object[] { this.getPointer(), pTLibAttr });
}
public void ReleaseTLibAttr(/* [in] */TLIBATTR pTLibAttr);
}
@@ -12,14 +12,11 @@
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Function;
import com.sun.jna.Pointer;
import com.sun.jna.PointerType;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.Guid.IID;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the ITypeInfo interface
*
@@ -28,74 +25,15 @@ import com.sun.jna.ptr.PointerByReference;
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class IUnknown extends PointerType {
/**
* The Class ByReference.
*/
public static class ByReference extends IUnknown implements
Structure.ByReference {
}
public interface IUnknown {
/** The Constant IID_IDispatch. */
public final static IID IID_IDispatch = new IID(
"{00000000-0000-0000-C000-000000000046}");
public final static IID IID_IUNKNOWN = new IID(
"{00000000-0000-0000-C000-000000000046}");
/**
* Instantiates a new i unknown.
*/
public IUnknown() {
}
public HRESULT QueryInterface(IID riid, PointerByReference ppvObject);
/**
* Instantiates a new i unknown.
*
* @param pvInstance
* the pv instance
*/
public IUnknown(Pointer pvInstance) {
super(pvInstance);
}
public int AddRef();
/**
* Query interface.
*
* @param riid
* the riid
* @param ppvObject
* the ppv object
* @return the hresult
*/
public HRESULT QueryInterface(IID riid, PointerByReference ppvObject) {
Pointer base = this.getPointer();
Pointer vptr = base.getPointer(0);
Pointer root = vptr.getPointer(0);
Function func = Function.getFunction(root);
int hr = func.invokeInt(new Object[] { base, riid, ppvObject });
return new HRESULT(hr);
}
/**
* Adds the ref.
*
* @return the ulong
*/
public int AddRef() {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(4));
return func.invokeInt(new Object[] { this.getPointer() });
}
/**
* Release.
*
* @return the ulong
*/
public int Release() {
Pointer vptr = this.getPointer().getPointer(0);
Function func = Function.getFunction(vptr.getPointer(8));
return func.invokeInt(new Object[] { this.getPointer() });
}
public int Release();
}
@@ -0,0 +1,283 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid.GUID;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WinDef.BOOL;
import com.sun.jna.platform.win32.WinDef.PVOID;
import com.sun.jna.platform.win32.WinDef.ULONG;
import com.sun.jna.platform.win32.WinNT.HRESULT;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the IRecordInfo interface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class RecordInfo extends Unknown implements IRecordInfo {
public static class ByReference extends RecordInfo implements
Structure.ByReference {
}
/**
* Instantiates a new i record info.
*/
public RecordInfo() {
}
/**
* Instantiates a new i record info.
*
* @param pvInstance
* the pv instance
*/
public RecordInfo(Pointer pvInstance) {
super(pvInstance);
}
/**
* Record init.
*
* @param pvNew
* the pv new
* @return the hresult
*/
public HRESULT RecordInit(/* [out] */PVOID pvNew) {
return null;
}
/**
* Record clear.
*
* @param pvExisting
* the pv existing
* @return the hresult
*/
public HRESULT RecordClear(
/* [in] */PVOID pvExisting) {
return null;
}
/**
* Record copy.
*
* @param pvExisting
* the pv existing
* @param pvNew
* the pv new
* @return the hresult
*/
public HRESULT RecordCopy(
/* [in] */PVOID pvExisting,
/* [out] */PVOID pvNew) {
return null;
}
/**
* Gets the guid.
*
* @param pguid
* the pguid
* @return the hresult
*/
public HRESULT GetGuid(
/* [out] */GUID pguid) {
return null;
}
/**
* Gets the name.
*
* @param pbstrName
* the pbstr name
* @return the hresult
*/
public HRESULT GetName(
/* [out] */BSTR pbstrName) {
return null;
}
/**
* Gets the size.
*
* @param pcbSize
* the pcb size
* @return the hresult
*/
public HRESULT GetSize(
/* [out] */ULONG pcbSize) {
return null;
}
/**
* Gets the type info.
*
* @param ppTypeInfo
* the pp type info
* @return the hresult
*/
public HRESULT GetTypeInfo(
/* [out] */ITypeInfo ppTypeInfo) {
return null;
}
/**
* Gets the field.
*
* @param pvData
* the pv data
* @param szFieldName
* the sz field name
* @param pvarField
* the pvar field
* @return the hresult
*/
public HRESULT GetField(
/* [in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [out] */VARIANT pvarField) {
return null;
}
/**
* Gets the field no copy.
*
* @param pvData
* the pv data
* @param szFieldName
* the sz field name
* @param pvarField
* the pvar field
* @param ppvDataCArray
* the ppv data c array
* @return the hresult
*/
public HRESULT GetFieldNoCopy(
/* [in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [out] */VARIANT pvarField,
/* [out] */PVOID ppvDataCArray) {
return null;
}
/**
* Put field.
*
* @param wFlags
* the w flags
* @param pvData
* the pv data
* @param szFieldName
* the sz field name
* @param pvarField
* the pvar field
* @return the hresult
*/
public HRESULT PutField(
/* [in] */ULONG wFlags,
/* [out][in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [in] */VARIANT pvarField) {
return null;
}
/**
* Put field no copy.
*
* @param wFlags
* the w flags
* @param pvData
* the pv data
* @param szFieldName
* the sz field name
* @param pvarField
* the pvar field
* @return the hresult
*/
public HRESULT PutFieldNoCopy(
/* [in] */ULONG wFlags,
/* [out][in] */PVOID pvData,
/* [in] */WString szFieldName,
/* [in] */VARIANT pvarField) {
return null;
}
/**
* Gets the field names.
*
* @param pcNames
* the pc names
* @param rgBstrNames
* the rg bstr names
* @return the hresult
*/
public HRESULT GetFieldNames(
/* [out][in] */ULONG pcNames,
/* [length_is][size_is][out] */BSTR rgBstrNames) {
return null;
}
/**
* Checks if is matching type.
*
* @param pRecordInfo
* the record info
* @return the bool
*/
public BOOL IsMatchingType(
/* [in] */IRecordInfo pRecordInfo) {
return null;
}
/**
* Record create.
*
* @return the pvoid
*/
public PVOID RecordCreate() {
return null;
}
/**
* Record create copy.
*
* @param pvSource
* the pv source
* @param ppvDest
* the ppv dest
* @return the hresult
*/
public HRESULT RecordCreateCopy(
/* [in] */PVOID pvSource,
/* [out] */PVOID ppvDest) {
return null;
}
/**
* Record destroy.
*
* @param pvRecord
* the pv record
* @return the hresult
*/
public HRESULT RecordDestroy(
/* [in] */PVOID pvRecord) {
return null;
}
}
@@ -0,0 +1,108 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.OaIdl.BINDPTR;
import com.sun.jna.platform.win32.OaIdl.DESCKIND;
import com.sun.jna.platform.win32.WinDef.ULONG;
import com.sun.jna.platform.win32.WinDef.WORD;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the ITypeComp interface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TypeComp extends Unknown {
public static class ByReference extends TypeComp implements
Structure.ByReference {
}
/**
* Instantiates a new i type comp.
*/
public TypeComp() {
}
/**
* Instantiates a new i type comp.
*
* @param pvInstance
* the pv instance
*/
public TypeComp(Pointer pvInstance) {
super(pvInstance);
}
/**
* Bind.
*
* @param szName
* the sz name
* @param lHashVal
* the l hash val
* @param wFlags
* the w flags
* @param ppTInfo
* the pp t info
* @param pDescKind
* the desc kind
* @param pBindPtr
* the bind ptr
* @return the hresult
*/
public HRESULT Bind(
/* [annotation][in] */
WString szName,
/* [in] */ULONG lHashVal,
/* [in] */WORD wFlags,
/* [out] */PointerByReference ppTInfo,
/* [out] */DESCKIND.ByReference pDescKind,
/* [out] */BINDPTR.ByReference pBindPtr) {
return (HRESULT) this._invokeNativeObject(3,
new Object[] { this.getPointer(), szName, lHashVal, wFlags,
ppTInfo, pDescKind, pBindPtr }, HRESULT.class);
}
/**
* Bind type.
*
* @param szName
* the sz name
* @param lHashVal
* the l hash val
* @param ppTInfo
* the pp t info
* @param ppTComp
* the pp t comp
* @return the hresult
*/
public HRESULT BindType(
/* [annotation][in] */
WString szName,
/* [in] */ULONG lHashVal,
/* [out] */PointerByReference ppTInfo,
/* [out] */PointerByReference ppTComp) {
return (HRESULT) this._invokeNativeObject(4,
new Object[] { this.getPointer(), szName, lHashVal, ppTInfo,
ppTComp }, HRESULT.class);
}
}
@@ -0,0 +1,431 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.Guid.REFIID;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.OaIdl.HREFTYPE;
import com.sun.jna.platform.win32.OaIdl.HREFTYPEByReference;
import com.sun.jna.platform.win32.OaIdl.INVOKEKIND;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TYPEATTR;
import com.sun.jna.platform.win32.OaIdl.VARDESC;
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WTypes.BSTRByReference;
import com.sun.jna.platform.win32.WTypes.LPOLESTR;
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
import com.sun.jna.platform.win32.WinDef.PVOID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.UINTByReference;
import com.sun.jna.platform.win32.WinDef.WORD;
import com.sun.jna.platform.win32.WinDef.WORDByReference;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the ITypeInfo interface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TypeInfo extends Unknown implements ITypeInfo {
public static class ByReference extends TypeInfo implements
Structure.ByReference {
}
/**
* Instantiates a new i type info.
*/
public TypeInfo() {
}
/**
* Instantiates a new i type info.
*
* @param pvInstance
* the pv instance
*/
public TypeInfo(Pointer pvInstance) {
super(pvInstance);
}
/**
* Gets the type attr.
*
* @param ppTypeAttr
* the pp type attr
* @return the hresult
*/
public HRESULT GetTypeAttr(
/* [out] */PointerByReference ppTypeAttr) {
return (HRESULT) this._invokeNativeObject(3,
new Object[] { this.getPointer(), ppTypeAttr }, HRESULT.class);
}
/**
* Gets the type comp.
*
* @param ppTComp
* the pp t comp
* @return the hresult
*/
public HRESULT GetTypeComp(
/* [out] */PointerByReference ppTComp) {
return (HRESULT) this._invokeNativeObject(4,
new Object[] { this.getPointer(), ppTComp }, HRESULT.class);
}
/**
* Gets the func desc.
*
* @param index
* the index
* @param ppFuncDesc
* the pp func desc
* @return the hresult
*/
public/* [local] */HRESULT GetFuncDesc(
/* [in] */UINT index,
/* [out] */PointerByReference ppFuncDesc) {
return (HRESULT) this._invokeNativeObject(5,
new Object[] { this.getPointer(), index, ppFuncDesc },
HRESULT.class);
}
/**
* Gets the var desc.
*
* @param index
* the index
* @param ppVarDesc
* the pp var desc
* @return the hresult
*/
public/* [local] */HRESULT GetVarDesc(
/* [in] */UINT index,
/* [out] */PointerByReference ppVarDesc) {
return (HRESULT) this._invokeNativeObject(6,
new Object[] { this.getPointer(), index, ppVarDesc },
HRESULT.class);
}
/**
* Gets the names.
*
* @param memid
* the memid
* @param rgBstrNames
* the rg bstr names
* @param cMaxNames
* the c max names
* @param pcNames
* the pc names
* @return the hresult
*/
public/* [local] */HRESULT GetNames(
/* [in] */MEMBERID memid,
/* [length_is][size_is][out] */BSTR[] rgBstrNames,
/* [in] */UINT cMaxNames,
/* [out] */UINTByReference pcNames) {
return (HRESULT) this._invokeNativeObject(7,
new Object[] { this.getPointer(), memid, rgBstrNames,
cMaxNames, pcNames }, HRESULT.class);
}
/**
* Gets the ref type of impl type.
*
* @param index
* the index
* @param pRefType
* the ref type
* @return the hresult
*/
public HRESULT GetRefTypeOfImplType(
/* [in] */UINT index,
/* [out] */HREFTYPEByReference pRefType) {
return (HRESULT) this._invokeNativeObject(8,
new Object[] { this.getPointer(), index, pRefType },
HRESULT.class);
}
/**
* Gets the impl type flags.
*
* @param index
* the index
* @param pImplTypeFlags
* the impl type flags
* @return the hresult
*/
public HRESULT GetImplTypeFlags(
/* [in] */UINT index,
/* [out] */IntByReference pImplTypeFlags) {
return (HRESULT) this._invokeNativeObject(9,
new Object[] { this.getPointer(), index, pImplTypeFlags },
HRESULT.class);
}
/**
* Gets the i ds of names.
*
* @param rgszNames
* the rgsz names
* @param cNames
* the c names
* @param pMemId
* the mem id
* @return the hresult
*/
public/* [local] */HRESULT GetIDsOfNames(
/* [size_is][in] */LPOLESTR[] rgszNames,
/* [in] */UINT cNames,
/* [size_is][out] */MEMBERID[] pMemId) {
return (HRESULT) this._invokeNativeObject(10,
new Object[] { this.getPointer(), rgszNames, cNames, pMemId },
HRESULT.class);
}
/**
* Invoke.
*
* @param pvInstance
* the pv instance
* @param memid
* the memid
* @param wFlags
* the w flags
* @param pDispParams
* the disp params
* @param pVarResult
* the var result
* @param pExcepInfo
* the excep info
* @param puArgErr
* the pu arg err
* @return the hresult
*/
public/* [local] */HRESULT Invoke(
/* [in] */PVOID pvInstance,
/* [in] */MEMBERID memid,
/* [in] */WORD wFlags,
/* [out][in] */DISPPARAMS.ByReference pDispParams,
/* [out] */VARIANT.ByReference pVarResult,
/* [out] */EXCEPINFO.ByReference pExcepInfo,
/* [out] */UINTByReference puArgErr) {
return (HRESULT) this._invokeNativeObject(11,
new Object[] { this.getPointer(), pvInstance, memid, wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr },
HRESULT.class);
}
/**
* Gets the documentation.
*
* @param memid
* the memid
* @param pBstrName
* the bstr name
* @param pBstrDocString
* the bstr doc string
* @param pdwHelpContext
* the pdw help context
* @param pBstrHelpFile
* the bstr help file
* @return the hresult
*/
public/* [local] */HRESULT GetDocumentation(
/* [in] */MEMBERID memid,
/* [out] */BSTRByReference pBstrName,
/* [out] */BSTRByReference pBstrDocString,
/* [out] */DWORDByReference pdwHelpContext,
/* [out] */BSTRByReference pBstrHelpFile) {
return (HRESULT) this._invokeNativeObject(12,
new Object[] { this.getPointer(), memid, pBstrName,
pBstrDocString, pdwHelpContext, pBstrHelpFile },
HRESULT.class);
}
/**
* Gets the dll entry.
*
* @param memid
* the memid
* @param invKind
* the inv kind
* @param pBstrDllName
* the bstr dll name
* @param pBstrName
* the bstr name
* @param pwOrdinal
* the pw ordinal
* @return the hresult
*/
public/* [local] */HRESULT GetDllEntry(
/* [in] */MEMBERID memid,
/* [in] */INVOKEKIND invKind,
/* [out] */BSTRByReference pBstrDllName,
/* [out] */BSTRByReference pBstrName,
/* [out] */WORDByReference pwOrdinal) {
return (HRESULT) this._invokeNativeObject(13,
new Object[] { this.getPointer(), memid, invKind, pBstrDllName,
pBstrName, pwOrdinal }, HRESULT.class);
}
/**
* Gets the ref type info.
*
* @param hRefType
* the h ref type
* @param ppTInfo
* the pp t info
* @return the hresult
*/
public HRESULT GetRefTypeInfo(
/* [in] */HREFTYPE hRefType,
/* [out] */PointerByReference ppTInfo) {
return (HRESULT) this._invokeNativeObject(14,
new Object[] { this.getPointer(), hRefType, ppTInfo },
HRESULT.class);
}
/**
* Address of member.
*
* @param memid
* the memid
* @param invKind
* the inv kind
* @param ppv
* the ppv
* @return the hresult
*/
public/* [local] */HRESULT AddressOfMember(
/* [in] */MEMBERID memid,
/* [in] */INVOKEKIND invKind,
/* [out] */PointerByReference ppv) {
return (HRESULT) this._invokeNativeObject(15,
new Object[] { this.getPointer(), memid, invKind, ppv },
HRESULT.class);
}
/**
* Creates the instance.
*
* @param pUnkOuter
* the unk outer
* @param riid
* the riid
* @param ppvObj
* the ppv obj
* @return the hresult
*/
public/* [local] */HRESULT CreateInstance(
/* [in] */IUnknown pUnkOuter,
/* [in] */REFIID riid,
/* [iid_is][out] */PointerByReference ppvObj) {
return (HRESULT) this._invokeNativeObject(16,
new Object[] { this.getPointer(), pUnkOuter, riid, ppvObj },
HRESULT.class);
}
/**
* Gets the mops.
*
* @param memid
* the memid
* @param pBstrMops
* the bstr mops
* @return the hresult
*/
public HRESULT GetMops(
/* [in] */MEMBERID memid,
/* [out] */BSTRByReference pBstrMops) {
return (HRESULT) this._invokeNativeObject(17,
new Object[] { this.getPointer(), memid, pBstrMops },
HRESULT.class);
}
/**
* Gets the containing type lib.
*
* @param ppTLib
* the pp t lib
* @param pIndex
* the index
* @return the hresult
*/
public/* [local] */HRESULT GetContainingTypeLib(
/* [out] */PointerByReference ppTLib,
/* [out] */UINTByReference pIndex) {
return (HRESULT) this._invokeNativeObject(18,
new Object[] { this.getPointer(), ppTLib, pIndex },
HRESULT.class);
}
/**
* Release type attr.
*
* @param pTypeAttr
* the type attr
*/
public/* [local] */void ReleaseTypeAttr(
/* [in] */TYPEATTR pTypeAttr) {
this._invokeNativeVoid(19, new Object[] { this.getPointer(), pTypeAttr });
}
/**
* Release func desc.
*
* @param pFuncDesc
* the func desc
*/
public/* [local] */void ReleaseFuncDesc(
/* [in] */FUNCDESC pFuncDesc) {
this._invokeNativeVoid(20, new Object[] { this.getPointer(), pFuncDesc });
}
/**
* Release var desc.
*
* @param pVarDesc
* the var desc
*/
public/* [local] */void ReleaseVarDesc(
/* [in] */VARDESC pVarDesc) {
this._invokeNativeVoid(21, new Object[] { this.getPointer(), pVarDesc });
}
}
@@ -0,0 +1,681 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.platform.win32.Guid.REFIID;
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.OaIdl.HREFTYPE;
import com.sun.jna.platform.win32.OaIdl.HREFTYPEByReference;
import com.sun.jna.platform.win32.OaIdl.INVOKEKIND;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TYPEATTR;
import com.sun.jna.platform.win32.OaIdl.VARDESC;
import com.sun.jna.platform.win32.OleAuto;
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WTypes.BSTRByReference;
import com.sun.jna.platform.win32.WTypes.LPOLESTR;
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
import com.sun.jna.platform.win32.WinDef.PVOID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.UINTByReference;
import com.sun.jna.platform.win32.WinDef.WORD;
import com.sun.jna.platform.win32.WinDef.WORDByReference;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* The Class ITypeInfoUtil.
*
* @author wolf.tobias@gmx.net The Class ITypeInfoUtil.
*/
public class TypeInfoUtil {
/** The Constant OLEAUTO. */
public final static OleAuto OLEAUTO = OleAuto.INSTANCE;
/** The type info. */
private ITypeInfo typeInfo;
/**
* Instantiates a new i type info util.
*
* @param typeInfo
* the type info
*/
public TypeInfoUtil(ITypeInfo typeInfo) {
this.typeInfo = typeInfo;
}
/**
* Gets the type attr.
*
* @return the type attr
*/
public TYPEATTR getTypeAttr() {
PointerByReference ppTypeAttr = new PointerByReference();
HRESULT hr = this.typeInfo.GetTypeAttr(ppTypeAttr);
COMUtils.checkRC(hr);
return new TYPEATTR(ppTypeAttr.getValue());
}
/**
* Gets the type comp.
*
* @return the type comp
*/
public TypeComp getTypeComp() {
PointerByReference ppTypeAttr = new PointerByReference();
HRESULT hr = this.typeInfo.GetTypeComp(ppTypeAttr);
COMUtils.checkRC(hr);
return new TypeComp(ppTypeAttr.getValue());
}
/**
* Gets the func desc.
*
* @param index
* the index
* @return the func desc
*/
public FUNCDESC getFuncDesc(int index) {
PointerByReference ppFuncDesc = new PointerByReference();
HRESULT hr = this.typeInfo.GetFuncDesc(new UINT(index), ppFuncDesc);
COMUtils.checkRC(hr);
return new FUNCDESC(ppFuncDesc.getValue());
}
/**
* Gets the var desc.
*
* @param index
* the index
* @return the var desc
*/
public VARDESC getVarDesc(int index) {
PointerByReference ppVarDesc = new PointerByReference();
HRESULT hr = this.typeInfo.GetVarDesc(new UINT(index), ppVarDesc);
COMUtils.checkRC(hr);
return new VARDESC(ppVarDesc.getValue());
}
/**
* Gets the names.
*
* @param memid
* the memid
* @param maxNames
* the max names
* @return the names
*/
public String[] getNames(MEMBERID memid, int maxNames) {
BSTR[] rgBstrNames = new BSTR[maxNames];
UINTByReference pcNames = new UINTByReference();
HRESULT hr = this.typeInfo.GetNames(memid, rgBstrNames, new UINT(
maxNames), pcNames);
COMUtils.checkRC(hr);
int cNames = pcNames.getValue().intValue();
String[] result = new String[cNames];
for (int i = 0; i < result.length; i++) {
result[i] = rgBstrNames[i].getValue();
OLEAUTO.SysFreeString(rgBstrNames[i]);
}
return result;
}
/**
* Gets the ref type of impl type.
*
* @param index
* the index
* @return the ref type of impl type
*/
public HREFTYPE getRefTypeOfImplType(int index) {
HREFTYPEByReference ppTInfo = new HREFTYPEByReference();
HRESULT hr = this.typeInfo.GetRefTypeOfImplType(new UINT(index),
ppTInfo);
COMUtils.checkRC(hr);
return ppTInfo.getValue();
}
/**
* Gets the impl type flags.
*
* @param index
* the index
* @return the impl type flags
*/
public int getImplTypeFlags(int index) {
IntByReference pImplTypeFlags = new IntByReference();
HRESULT hr = this.typeInfo.GetImplTypeFlags(new UINT(index),
pImplTypeFlags);
COMUtils.checkRC(hr);
return pImplTypeFlags.getValue();
}
/**
* Gets the i ds of names.
*
* @param rgszNames
* the rgsz names
* @param cNames
* the c names
* @return the i ds of names
*/
public MEMBERID[] getIDsOfNames(LPOLESTR[] rgszNames, int cNames) {
MEMBERID[] pMemId = new MEMBERID[cNames];
HRESULT hr = this.typeInfo.GetIDsOfNames(rgszNames, new UINT(cNames),
pMemId);
COMUtils.checkRC(hr);
return pMemId;
}
/**
* Invoke.
*
* @param pvInstance
* the pv instance
* @param memid
* the memid
* @param wFlags
* the w flags
* @param pDispParams
* the disp params
* @return the invoke
*/
public Invoke Invoke(PVOID pvInstance, MEMBERID memid, WORD wFlags,
DISPPARAMS.ByReference pDispParams) {
VARIANT.ByReference pVarResult = new VARIANT.ByReference();
EXCEPINFO.ByReference pExcepInfo = new EXCEPINFO.ByReference();
UINTByReference puArgErr = new UINTByReference();
HRESULT hr = this.typeInfo.Invoke(pvInstance, memid, wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
COMUtils.checkRC(hr);
return new Invoke(pVarResult, pExcepInfo, puArgErr.getValue()
.intValue());
}
/**
* The Class Invoke.
*
* @author wolf.tobias@gmx.net The Class Invoke.
*/
public static class Invoke {
/** The p var result. */
private VARIANT.ByReference pVarResult;
/** The p excep info. */
private EXCEPINFO.ByReference pExcepInfo;
/** The pu arg err. */
private int puArgErr;
/**
* Instantiates a new invoke.
*
* @param pVarResult
* the var result
* @param pExcepInfo
* the excep info
* @param puArgErr
* the pu arg err
*/
public Invoke(VARIANT.ByReference pVarResult,
EXCEPINFO.ByReference pExcepInfo, int puArgErr) {
this.pVarResult = pVarResult;
this.pExcepInfo = pExcepInfo;
this.puArgErr = puArgErr;
}
/**
* Gets the p var result.
*
* @return the p var result
*/
public VARIANT.ByReference getpVarResult() {
return pVarResult;
}
/**
* Gets the p excep info.
*
* @return the p excep info
*/
public EXCEPINFO.ByReference getpExcepInfo() {
return pExcepInfo;
}
/**
* Gets the pu arg err.
*
* @return the pu arg err
*/
public int getPuArgErr() {
return puArgErr;
}
}
/**
* Gets the documentation.
*
* @param memid
* the memid
* @return the documentation
*/
public TypeInfoDoc getDocumentation(MEMBERID memid) {
BSTRByReference pBstrName = new BSTRByReference();
BSTRByReference pBstrDocString = new BSTRByReference();
DWORDByReference pdwHelpContext = new DWORDByReference();
BSTRByReference pBstrHelpFile = new BSTRByReference();
HRESULT hr = this.typeInfo.GetDocumentation(memid, pBstrName,
pBstrDocString, pdwHelpContext, pBstrHelpFile);
COMUtils.checkRC(hr);
TypeInfoDoc TypeInfoDoc = new TypeInfoDoc(pBstrName.getString(),
pBstrDocString.getString(), pdwHelpContext.getValue()
.intValue(), pBstrHelpFile.getString());
OLEAUTO.SysFreeString(pBstrName.getValue());
OLEAUTO.SysFreeString(pBstrDocString.getValue());
OLEAUTO.SysFreeString(pBstrHelpFile.getValue());
return TypeInfoDoc;
}
/**
* The Class TypeInfoDoc.
*
* @author wolf.tobias@gmx.net The Class TypeInfoDoc.
*/
public static class TypeInfoDoc {
/** The name. */
private String name;
/** The doc string. */
private String docString;
/** The help context. */
private int helpContext;
/** The help file. */
private String helpFile;
/**
* Instantiates a new type info doc.
*
* @param name
* the name
* @param docString
* the doc string
* @param helpContext
* the help context
* @param helpFile
* the help file
*/
public TypeInfoDoc(String name, String docString, int helpContext,
String helpFile) {
this.name = name;
this.docString = docString;
this.helpContext = helpContext;
this.helpFile = helpFile;
}
/**
* Gets the name.
*
* @return the name
*/
public String getName() {
return name;
}
/**
* Gets the doc string.
*
* @return the doc string
*/
public String getDocString() {
return docString;
}
/**
* Gets the help context.
*
* @return the help context
*/
public int getHelpContext() {
return helpContext;
}
/**
* Gets the help file.
*
* @return the help file
*/
public String getHelpFile() {
return helpFile;
}
}
/**
* Gets the dll entry.
*
* @param memid
* the memid
* @param invKind
* the inv kind
* @return the dll entry
*/
public DllEntry GetDllEntry(MEMBERID memid, INVOKEKIND invKind) {
BSTRByReference pBstrDllName = new BSTRByReference();
BSTRByReference pBstrName = new BSTRByReference();
WORDByReference pwOrdinal = new WORDByReference();
HRESULT hr = this.typeInfo.GetDllEntry(memid, invKind, pBstrDllName,
pBstrName, pwOrdinal);
COMUtils.checkRC(hr);
OLEAUTO.SysFreeString(pBstrDllName.getValue());
OLEAUTO.SysFreeString(pBstrName.getValue());
return new DllEntry(pBstrDllName.getString(), pBstrName.getString(),
pwOrdinal.getValue().intValue());
}
/**
* The Class DllEntry.
*
* @author wolf.tobias@gmx.net The Class DllEntry.
*/
public static class DllEntry {
/** The dll name. */
private String dllName;
/** The name. */
private String name;
/** The ordinal. */
private int ordinal;
/**
* Instantiates a new dll entry.
*
* @param dllName
* the dll name
* @param name
* the name
* @param ordinal
* the ordinal
*/
public DllEntry(String dllName, String name, int ordinal) {
this.dllName = dllName;
this.name = name;
this.ordinal = ordinal;
}
/**
* Gets the dll name.
*
* @return the dll name
*/
public String getDllName() {
return dllName;
}
/**
* Sets the dll name.
*
* @param dllName
* the new dll name
*/
public void setDllName(String dllName) {
this.dllName = dllName;
}
/**
* Gets the name.
*
* @return the name
*/
public String getName() {
return name;
}
/**
* Sets the name.
*
* @param name
* the new name
*/
public void setName(String name) {
this.name = name;
}
/**
* Gets the ordinal.
*
* @return the ordinal
*/
public int getOrdinal() {
return ordinal;
}
/**
* Sets the ordinal.
*
* @param ordinal
* the new ordinal
*/
public void setOrdinal(int ordinal) {
this.ordinal = ordinal;
}
}
/**
* Gets the ref type info.
*
* @param hreftype
* the hreftype
* @return the ref type info
*/
public ITypeInfo getRefTypeInfo(HREFTYPE hreftype) {
PointerByReference ppTInfo = new PointerByReference();
HRESULT hr = this.typeInfo.GetRefTypeInfo(hreftype, ppTInfo);
COMUtils.checkRC(hr);
return new TypeInfo(ppTInfo.getValue());
}
/**
* Address of member.
*
* @param memid
* the memid
* @param invKind
* the inv kind
* @return the pointer by reference
*/
public PointerByReference AddressOfMember(MEMBERID memid, INVOKEKIND invKind) {
PointerByReference ppv = new PointerByReference();
HRESULT hr = this.typeInfo.AddressOfMember(memid, invKind, ppv);
COMUtils.checkRC(hr);
return ppv;
}
/**
* Creates the instance.
*
* @param pUnkOuter
* the unk outer
* @param riid
* the riid
* @return the pointer by reference
*/
public PointerByReference CreateInstance(IUnknown pUnkOuter, REFIID riid) {
PointerByReference ppvObj = new PointerByReference();
HRESULT hr = this.typeInfo.CreateInstance(pUnkOuter, riid, ppvObj);
COMUtils.checkRC(hr);
return ppvObj;
}
/**
* Gets the mops.
*
* @param memid
* the memid
* @return the string
*/
public String GetMops(MEMBERID memid) {
BSTRByReference pBstrMops = new BSTRByReference();
HRESULT hr = this.typeInfo.GetMops(memid, pBstrMops);
COMUtils.checkRC(hr);
return pBstrMops.getString();
}
/**
* Gets the containing type lib.
*
* @return the containing type lib
*/
public ContainingTypeLib GetContainingTypeLib() {
PointerByReference ppTLib = new PointerByReference();
UINTByReference pIndex = new UINTByReference();
HRESULT hr = this.typeInfo.GetContainingTypeLib(ppTLib, pIndex);
COMUtils.checkRC(hr);
return new ContainingTypeLib(new TypeLib(ppTLib.getValue()), pIndex
.getValue().intValue());
}
/**
* The Class ContainingTypeLib.
*
* @author wolf.tobias@gmx.net The Class ContainingTypeLib.
*/
public static class ContainingTypeLib {
/** The type lib. */
private ITypeLib typeLib;
/** The index. */
private int index;
/**
* Instantiates a new containing type lib.
*
* @param typeLib
* the type lib
* @param index
* the index
*/
public ContainingTypeLib(ITypeLib typeLib, int index) {
this.typeLib = typeLib;
this.index = index;
}
/**
* Gets the type lib.
*
* @return the type lib
*/
public ITypeLib getTypeLib() {
return typeLib;
}
/**
* Sets the type lib.
*
* @param typeLib
* the new type lib
*/
public void setTypeLib(ITypeLib typeLib) {
this.typeLib = typeLib;
}
/**
* Gets the index.
*
* @return the index
*/
public int getIndex() {
return index;
}
/**
* Sets the index.
*
* @param index
* the new index
*/
public void setIndex(int index) {
this.index = index;
}
}
/**
* Release type attr.
*
* @param pTypeAttr
* the type attr
*/
public void ReleaseTypeAttr(TYPEATTR pTypeAttr) {
this.typeInfo.ReleaseTypeAttr(pTypeAttr);
}
/**
* Release func desc.
*
* @param pFuncDesc
* the func desc
*/
public void ReleaseFuncDesc(FUNCDESC pFuncDesc) {
this.typeInfo.ReleaseFuncDesc(pFuncDesc);
}
/**
* Release var desc.
*
* @param pVarDesc
* the var desc
*/
public void ReleaseVarDesc(VARDESC pVarDesc) {
this.typeInfo.ReleaseVarDesc(pVarDesc);
}
}
@@ -0,0 +1,239 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.Guid.GUID;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TLIBATTR;
import com.sun.jna.platform.win32.OaIdl.TYPEKIND;
import com.sun.jna.platform.win32.WTypes.BSTRByReference;
import com.sun.jna.platform.win32.WTypes.LPOLESTR;
import com.sun.jna.platform.win32.WinDef.BOOLByReference;
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.ULONG;
import com.sun.jna.platform.win32.WinDef.USHORTByReference;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the ITypeLib interface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TypeLib extends Unknown implements ITypeLib {
public static class ByReference extends TypeLib implements
Structure.ByReference {
}
/**
* Instantiates a new i type lib.
*/
public TypeLib() {
}
/**
* Instantiates a new i type lib.
*
* @param pvInstance
* the pv instance
*/
public TypeLib(Pointer pvInstance) {
super(pvInstance);
}
/**
* Gets the type info count.
*
* @return the uint
*/
public UINT GetTypeInfoCount() {
return (UINT) this._invokeNativeObject(3,
new Object[] { this.getPointer() }, UINT.class);
}
/**
* Gets the type info.
*
* @param index
* the index
* @param pTInfo
* the t info
* @return the hresult
*/
public HRESULT GetTypeInfo(
/* [in] */UINT index,
/* [out] */PointerByReference pTInfo) {
return (HRESULT) this._invokeNativeObject(4,
new Object[] { this.getPointer(), index, pTInfo },
HRESULT.class);
}
/**
* Gets the type info type.
*
* @param index
* the index
* @param pTKind
* the t kind
* @return the hresult
*/
public HRESULT GetTypeInfoType(
/* [in] */UINT index,
/* [out] */TYPEKIND.ByReference pTKind) {
return (HRESULT) this._invokeNativeObject(5,
new Object[] { this.getPointer(), index, pTKind },
HRESULT.class);
}
/**
* Gets the type info of guid.
*
* @param guid
* the guid
* @param pTinfo
* the tinfo
* @return the hresult
*/
public HRESULT GetTypeInfoOfGuid(
/* [in] */GUID guid,
/* [out] */PointerByReference pTinfo) {
return (HRESULT) this
._invokeNativeObject(6, new Object[] { this.getPointer(), guid,
pTinfo }, HRESULT.class);
}
/**
* Gets the lib attr.
*
* @param ppTLibAttr
* the pp t lib attr
* @return the hresult
*/
public HRESULT GetLibAttr(
/* [out] */PointerByReference ppTLibAttr) {
return (HRESULT) this._invokeNativeObject(7,
new Object[] { this.getPointer(), ppTLibAttr }, HRESULT.class);
}
/**
* Gets the type comp.
*
* @param pTComp
* the t comp
* @return the hresult
*/
public HRESULT GetTypeComp(
/* [out] */PointerByReference pTComp) {
return (HRESULT) this._invokeNativeObject(8,
new Object[] { this.getPointer(), pTComp }, HRESULT.class);
}
/**
* Gets the documentation.
*
* @param index
* the index
* @param pBstrName
* the bstr name
* @param pBstrDocString
* the bstr doc string
* @param pdwHelpContext
* the pdw help context
* @param pBstrHelpFile
* the bstr help file
* @return the hresult
*/
public HRESULT GetDocumentation(
/* [in] */int index,
/* [out] */BSTRByReference pBstrName,
/* [out] */BSTRByReference pBstrDocString,
/* [out] */DWORDByReference pdwHelpContext,
/* [out] */BSTRByReference pBstrHelpFile) {
return (HRESULT) this._invokeNativeObject(9,
new Object[] { this.getPointer(), index, pBstrName,
pBstrDocString, pdwHelpContext, pBstrHelpFile },
HRESULT.class);
}
/**
* Checks if is name.
*
* @param szNameBuf
* the sz name buf
* @param lHashVal
* the l hash val
* @param pfName
* the pf name
* @return the hresult
*/
public HRESULT IsName(
/* [annotation][out][in] */
LPOLESTR szNameBuf,
/* [in] */ULONG lHashVal,
/* [out] */BOOLByReference pfName) {
return (HRESULT) this
._invokeNativeObject(10, new Object[] { this.getPointer(),
szNameBuf, lHashVal, pfName }, HRESULT.class);
}
/**
* Find name.
*
* @param szNameBuf
* the sz name buf
* @param lHashVal
* the l hash val
* @param ppTInfo
* the pp t info
* @param rgMemId
* the rg mem id
* @param pcFound
* the pc found
* @return the hresult
*/
public HRESULT FindName(
/* [annotation][out][in] */
BSTRByReference szNameBuf,
/* [in] */ULONG lHashVal,
/* [length_is][size_is][out] */ITypeInfo[] ppTInfo,
/* [length_is][size_is][out] */MEMBERID[] rgMemId,
/* [out][in] */USHORTByReference pcFound) {
return (HRESULT) this._invokeNativeObject(11,
new Object[] { this.getPointer(), szNameBuf, lHashVal, ppTInfo,
rgMemId, pcFound }, HRESULT.class);
}
/**
* Release t lib attr.
*
* @param pTLibAttr
* the t lib attr
*/
public void ReleaseTLibAttr(/* [in] */TLIBATTR pTLibAttr) {
this._invokeNativeObject(12, new Object[] { this.getPointer() },
HRESULT.class);
}
}
@@ -0,0 +1,536 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid.CLSID;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TLIBATTR;
import com.sun.jna.platform.win32.OaIdl.TYPEKIND;
import com.sun.jna.platform.win32.Ole32;
import com.sun.jna.platform.win32.OleAuto;
import com.sun.jna.platform.win32.WTypes.BSTRByReference;
import com.sun.jna.platform.win32.WTypes.LPOLESTR;
import com.sun.jna.platform.win32.WinDef.BOOLByReference;
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
import com.sun.jna.platform.win32.WinDef.LCID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.ULONG;
import com.sun.jna.platform.win32.WinDef.USHORTByReference;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the class ITypeLibUtil.
*
* @author wolf.tobias@gmx.net The Class ITypeLibUtil.
*/
public class TypeLibUtil {
/** The Constant OLEAUTO. */
public final static OleAuto OLEAUTO = OleAuto.INSTANCE;
/** The typelib. */
private ITypeLib typelib;
// get user default lcid
/** The lcid. */
private LCID lcid = Kernel32.INSTANCE.GetUserDefaultLCID();
/** The name. */
private String name;
/** The doc string. */
private String docString;
/** The help context. */
private int helpContext;
/** The help file. */
private String helpFile;
/**
* Instantiates a new i type lib util.
*
* @param clsidStr
* the clsid str
* @param wVerMajor
* the w ver major
* @param wVerMinor
* the w ver minor
*/
public TypeLibUtil(String clsidStr, int wVerMajor, int wVerMinor) {
CLSID.ByReference clsid = new CLSID.ByReference();
// get CLSID from string
HRESULT hr = Ole32.INSTANCE.CLSIDFromString(new WString(clsidStr),
clsid);
COMUtils.checkRC(hr);
// load typelib
PointerByReference pTypeLib = new PointerByReference();
hr = OleAuto.INSTANCE.LoadRegTypeLib(clsid, wVerMajor, wVerMinor, lcid,
pTypeLib);
COMUtils.checkRC(hr);
// init type lib class
this.typelib = new TypeLib(pTypeLib.getValue());
this.initTypeLibInfo();
}
public TypeLibUtil(String file) {
// load typelib
PointerByReference pTypeLib = new PointerByReference();
HRESULT hr = OleAuto.INSTANCE.LoadTypeLib(new WString(file), pTypeLib);
COMUtils.checkRC(hr);
// init type lib class
this.typelib = new TypeLib(pTypeLib.getValue());
this.initTypeLibInfo();
}
/**
* Inits the type lib info.
*/
private void initTypeLibInfo() {
TypeLibDoc documentation = this.getDocumentation(-1);
this.name = documentation.getName();
this.docString = documentation.getDocString();
this.helpContext = documentation.getHelpContext();
this.helpFile = documentation.getHelpFile();
}
/**
* Gets the type info count.
*
* @return the type info count
*/
public int getTypeInfoCount() {
return this.typelib.GetTypeInfoCount().intValue();
}
/**
* Gets the type info type.
*
* @param index
* the index
* @return the type info type
*/
public TYPEKIND getTypeInfoType(int index) {
TYPEKIND.ByReference typekind = new TYPEKIND.ByReference();
HRESULT hr = this.typelib.GetTypeInfoType(new UINT(index), typekind);
COMUtils.checkRC(hr);
return typekind;
}
/**
* Gets the type info.
*
* @param index
* the index
* @return the type info
*/
public ITypeInfo getTypeInfo(int index) {
PointerByReference ppTInfo = new PointerByReference();
HRESULT hr = this.typelib.GetTypeInfo(new UINT(index), ppTInfo);
COMUtils.checkRC(hr);
return new TypeInfo(ppTInfo.getValue());
}
/**
* Gets the type info util.
*
* @param index
* the index
* @return the type info util
*/
public TypeInfoUtil getTypeInfoUtil(int index) {
return new TypeInfoUtil(this.getTypeInfo(index));
}
/**
* Gets the lib attr.
*
* @return the lib attr
*/
public TLIBATTR getLibAttr() {
PointerByReference ppTLibAttr = new PointerByReference();
HRESULT hr = typelib.GetLibAttr(ppTLibAttr);
COMUtils.checkRC(hr);
return new TLIBATTR(ppTLibAttr.getValue());
}
/**
* Gets the type comp.
*
* @return the i type comp. by reference
*/
public TypeComp GetTypeComp() {
PointerByReference ppTComp = new PointerByReference();
HRESULT hr = this.typelib.GetTypeComp(ppTComp);
COMUtils.checkRC(hr);
return new TypeComp(ppTComp.getValue());
}
/**
* Gets the documentation.
*
* @param index
* the index
* @return the documentation
*/
public TypeLibDoc getDocumentation(int index) {
BSTRByReference pBstrName = new BSTRByReference();
BSTRByReference pBstrDocString = new BSTRByReference();
DWORDByReference pdwHelpContext = new DWORDByReference();
BSTRByReference pBstrHelpFile = new BSTRByReference();
HRESULT hr = typelib.GetDocumentation(index, pBstrName, pBstrDocString,
pdwHelpContext, pBstrHelpFile);
COMUtils.checkRC(hr);
TypeLibDoc typeLibDoc = new TypeLibDoc(pBstrName.getString(),
pBstrDocString.getString(), pdwHelpContext.getValue()
.intValue(), pBstrHelpFile.getString());
OLEAUTO.SysFreeString(pBstrName.getValue());
OLEAUTO.SysFreeString(pBstrDocString.getValue());
OLEAUTO.SysFreeString(pBstrHelpFile.getValue());
return typeLibDoc;
}
/**
* The Class TypeLibDoc.
*
* @author wolf.tobias@gmx.net The Class TypeLibDoc.
*/
public static class TypeLibDoc {
/** The name. */
private String name;
/** The doc string. */
private String docString;
/** The help context. */
private int helpContext;
/** The help file. */
private String helpFile;
/**
* Instantiates a new type lib doc.
*
* @param name
* the name
* @param docString
* the doc string
* @param helpContext
* the help context
* @param helpFile
* the help file
*/
public TypeLibDoc(String name, String docString, int helpContext,
String helpFile) {
this.name = name;
this.docString = docString;
this.helpContext = helpContext;
this.helpFile = helpFile;
}
/**
* Gets the name.
*
* @return the name
*/
public String getName() {
return name;
}
/**
* Gets the doc string.
*
* @return the doc string
*/
public String getDocString() {
return docString;
}
/**
* Gets the help context.
*
* @return the help context
*/
public int getHelpContext() {
return helpContext;
}
/**
* Gets the help file.
*
* @return the help file
*/
public String getHelpFile() {
return helpFile;
}
}
/**
* Checks if is name.
*
* @param nameBuf
* the name buf
* @param hashVal
* the hash val
* @return the checks if is name
*/
public IsName IsName(String nameBuf, int hashVal) {
LPOLESTR szNameBuf = new LPOLESTR(nameBuf);
ULONG lHashVal = new ULONG(hashVal);
BOOLByReference pfName = new BOOLByReference();
HRESULT hr = this.typelib.IsName(szNameBuf, lHashVal, pfName);
COMUtils.checkRC(hr);
return new IsName(szNameBuf.getValue(), pfName.getValue()
.booleanValue());
}
/**
* The Class IsName.
*
* @author wolf.tobias@gmx.net The Class IsName.
*/
public static class IsName {
/** The name buf. */
private String nameBuf;
/** The name. */
private boolean name;
/**
* Instantiates a new checks if is name.
*
* @param nameBuf
* the name buf
* @param name
* the name
*/
public IsName(String nameBuf, boolean name) {
this.nameBuf = nameBuf;
this.name = name;
}
/**
* Gets the name buf.
*
* @return the name buf
*/
public String getNameBuf() {
return nameBuf;
}
/**
* Checks if is name.
*
* @return true, if is name
*/
public boolean isName() {
return name;
}
}
/**
* Find name.
*
* @param name
* the name
* @param hashVal
* the hash val
* @param found
* the found
* @return the find name
*/
public FindName FindName(String name, int hashVal, short found) {
/* [annotation][out][in] */
BSTRByReference szNameBuf = new BSTRByReference(
OleAuto.INSTANCE.SysAllocString(name));
/* [in] */ULONG lHashVal = new ULONG(hashVal);
/* [out][in] */USHORTByReference pcFound = new USHORTByReference(found);
HRESULT hr = this.typelib.FindName(szNameBuf, lHashVal, null, null,
pcFound);
COMUtils.checkRC(hr);
found = pcFound.getValue().shortValue();
/* [length_is][size_is][out] */ITypeInfo[] ppTInfo = new ITypeInfo[found];
/* [length_is][size_is][out] */MEMBERID[] rgMemId = new MEMBERID[found];
hr = this.typelib.FindName(szNameBuf, lHashVal, ppTInfo, rgMemId,
pcFound);
COMUtils.checkRC(hr);
FindName findName = new FindName(szNameBuf.getString(), ppTInfo,
rgMemId, found);
OLEAUTO.SysFreeString(szNameBuf.getValue());
return findName;
}
/**
* The Class FindName.
*
* @author wolf.tobias@gmx.net The Class FindName.
*/
public static class FindName {
/** The name buf. */
private String nameBuf;
/** The p t info. */
private ITypeInfo[] pTInfo;
/** The rg mem id. */
private MEMBERID[] rgMemId;
/** The pc found. */
private short pcFound;
/**
* Instantiates a new find name.
*
* @param nameBuf
* the name buf
* @param pTInfo
* the t info
* @param rgMemId
* the rg mem id
* @param pcFound
* the pc found
*/
public FindName(String nameBuf, ITypeInfo[] pTInfo, MEMBERID[] rgMemId,
short pcFound) {
this.nameBuf = nameBuf;
this.pTInfo = pTInfo;
this.rgMemId = rgMemId;
this.pcFound = pcFound;
}
/**
* Gets the name buf.
*
* @return the name buf
*/
public String getNameBuf() {
return nameBuf;
}
/**
* Gets the t info.
*
* @return the t info
*/
public ITypeInfo[] getTInfo() {
return pTInfo;
}
/**
* Gets the mem id.
*
* @return the mem id
*/
public MEMBERID[] getMemId() {
return rgMemId;
}
/**
* Gets the found.
*
* @return the found
*/
public short getFound() {
return pcFound;
}
}
/**
* Release t lib attr.
*
* @param pTLibAttr
* the t lib attr
*/
public void ReleaseTLibAttr(/* [in] */TLIBATTR pTLibAttr) {
this.typelib.ReleaseTLibAttr(pTLibAttr);
}
/**
* Gets the lcid.
*
* @return the lcid
*/
public LCID getLcid() {
return lcid;
}
/**
* Gets the typelib.
*
* @return the typelib
*/
public ITypeLib getTypelib() {
return typelib;
}
/**
* Gets the name.
*
* @return the name
*/
public String getName() {
return name;
}
/**
* Gets the doc string.
*
* @return the doc string
*/
public String getDocString() {
return docString;
}
/**
* Gets the help context.
*
* @return the help context
*/
public long getHelpContext() {
return helpContext;
}
/**
* Gets the help file.
*
* @return the help file
*/
public String getHelpFile() {
return helpFile;
}
}
@@ -0,0 +1,71 @@
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.Guid.IID;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.PointerByReference;
// TODO: Auto-generated Javadoc
/**
* Wrapper class for the ITypeInfo interface
*
* Method Name V-Table Offset IUnknown.QueryInterface 0 IUnknown.AddRef 4
* IUnknown.Release 8
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class Unknown extends COMInvoker implements IUnknown {
public static class ByReference extends Unknown implements
Structure.ByReference {
}
public Unknown() {
}
/**
* Instantiates a new i unknown.
*
* @param pvInstance
* the pv instance
*/
public Unknown(Pointer pvInstance) {
this.setPointer(pvInstance);
}
/**
* Query interface.
*
* @param riid
* the riid
* @param ppvObject
* the ppv object
* @return the hresult
*/
public HRESULT QueryInterface(IID riid, PointerByReference ppvObject) {
return (HRESULT) this._invokeNativeObject(0,
new Object[] { this.getPointer(), riid, ppvObject },
HRESULT.class);
}
public int AddRef() {
return this._invokeNativeInt(1, new Object[] { this.getPointer() });
}
public int Release() {
return this._invokeNativeInt(2, new Object[] { this.getPointer() });
}
}
@@ -0,0 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head></head>
<body>
Provides...
</body>
</html>
@@ -0,0 +1,231 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.sun.jna.platform.win32.OaIdl.TYPEKIND;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
import com.sun.jna.platform.win32.COM.tlb.imp.TlbBase;
import com.sun.jna.platform.win32.COM.tlb.imp.TlbCmdlineArgs;
import com.sun.jna.platform.win32.COM.tlb.imp.TlbCoClass;
import com.sun.jna.platform.win32.COM.tlb.imp.TlbConst;
import com.sun.jna.platform.win32.COM.tlb.imp.TlbDispInterface;
import com.sun.jna.platform.win32.COM.tlb.imp.TlbEnum;
import com.sun.jna.platform.win32.COM.tlb.imp.TlbInterface;
// TODO: Auto-generated Javadoc
/**
* The Class TlbImp.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbImp implements TlbConst {
/** The type lib util. */
private TypeLibUtil typeLibUtil;
/** The out. */
private File comRootDir;
private File outputDir;
private TlbCmdlineArgs cmdlineArgs;
/**
* The main method.
*
* @param args
* the arguments
*/
public static void main(String[] args) {
new TlbImp(args);
}
public TlbImp(String[] args) {
this.cmdlineArgs = new TlbCmdlineArgs(args);
if (this.cmdlineArgs.isTlbId()) {
String clsid = this.cmdlineArgs.getRequiredParam(CMD_ARG_TYPELIB_ID);
int majorVersion = this.cmdlineArgs
.getIntParam(CMD_ARG_TYPELIB_MAJOR_VERSION);
int minorVersion = this.cmdlineArgs
.getIntParam(CMD_ARG_TYPELIB_MINOR_VERSION);
// initialize typelib
// check version numbers with registry entries!!!
this.typeLibUtil = new TypeLibUtil(clsid, majorVersion,
minorVersion);
this.startCOM2Java();
} else if (this.cmdlineArgs.isTlbFile()) {
String file = this.cmdlineArgs.getRequiredParam(CMD_ARG_TYPELIB_FILE);
// initialize typelib
// check version numbers with registry entries!!!
this.typeLibUtil = new TypeLibUtil(file);
this.startCOM2Java();
} else
this.cmdlineArgs.showCmdHelp();
}
/**
* Start startCOM2Java.
*/
public void startCOM2Java() {
try {
// create output Dir
this.createDir();
String bindingMode = this.cmdlineArgs.getBindingMode();
int typeInfoCount = typeLibUtil.getTypeInfoCount();
for (int i = 0; i < typeInfoCount; ++i) {
TYPEKIND typekind = typeLibUtil.getTypeInfoType(i);
if (typekind.value == TYPEKIND.TKIND_ENUM) {
this.createCOMEnum(i, this.getPackageName(), typeLibUtil);
} else if (typekind.value == TYPEKIND.TKIND_RECORD) {
this.logInfo("'TKIND_RECORD' objects are currently not supported!");
} else if (typekind.value == TYPEKIND.TKIND_MODULE) {
this.logInfo("'TKIND_MODULE' objects are currently not supported!");
} else if (typekind.value == TYPEKIND.TKIND_INTERFACE) {
this.createCOMInterface(i, this.getPackageName(),
typeLibUtil);
} else if (typekind.value == TYPEKIND.TKIND_DISPATCH) {
this.createCOMDispInterface(i, this.getPackageName(),
typeLibUtil);
} else if (typekind.value == TYPEKIND.TKIND_COCLASS) {
this.createCOMCoClass(i, this.getPackageName(),
typeLibUtil, bindingMode);
} else if (typekind.value == TYPEKIND.TKIND_ALIAS) {
this.logInfo("'TKIND_ALIAS' objects are currently not supported!");
} else if (typekind.value == TYPEKIND.TKIND_UNION) {
this.logInfo("'TKIND_UNION' objects are currently not supported!");
}
}
logInfo(typeInfoCount + " files sucessfully written to: "
+ this.comRootDir.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
private void createDir() throws FileNotFoundException {
String _outputDir = this.cmdlineArgs.getParam(CMD_ARG_OUTPUT_DIR);
String path = "_jnaCOM_" + System.currentTimeMillis() + "\\myPackage\\"
+ this.typeLibUtil.getName().toLowerCase() + "\\";
if (_outputDir != null) {
this.comRootDir = new File(_outputDir + "\\" + path);
} else {
String tmp = System.getProperty("java.io.tmpdir");
this.comRootDir = new File(tmp + "\\" + path);
}
if (this.comRootDir.exists())
this.comRootDir.delete();
if (this.comRootDir.mkdirs()) {
logInfo("Output directory sucessfully created.");
} else {
throw new FileNotFoundException(
"Output directory NOT sucessfully created to: "
+ this.comRootDir.toString());
}
}
private String getPackageName() {
return "myPackage." + this.typeLibUtil.getName().toLowerCase();
}
private void writeTextFile(String filename, String str) throws IOException {
String file = this.comRootDir + File.separator + filename;
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(file));
bos.write(str.getBytes());
bos.close();
}
private void writeTlbClass(TlbBase tlbBase) throws IOException {
StringBuffer classBuffer = tlbBase.getClassBuffer();
this.writeTextFile(tlbBase.getFilename(), classBuffer.toString());
}
/**
* Creates the com enum.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @return the string buffer
*/
private void createCOMEnum(int index, String packagename,
TypeLibUtil typeLibUtil) throws IOException {
TlbEnum tlbEnum = new TlbEnum(index, packagename, typeLibUtil);
this.writeTlbClass(tlbEnum);
}
/**
* Creates the com interface.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @return the string buffer
*/
private void createCOMInterface(int index, String packagename,
TypeLibUtil typeLibUtil) throws IOException {
TlbInterface tlbInterface = new TlbInterface(index, packagename,
typeLibUtil);
this.writeTlbClass(tlbInterface);
}
/**
* Creates the com dispatch.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @return the string buffer
*/
private void createCOMDispInterface(int index, String packagename,
TypeLibUtil typeLibUtil) throws IOException {
TlbDispInterface tlbDispatch = new TlbDispInterface(index, packagename,
typeLibUtil);
this.writeTlbClass(tlbDispatch);
}
private void createCOMCoClass(int index, String packagename,
TypeLibUtil typeLibUtil, String bindingMode) throws IOException {
TlbCoClass tlbCoClass = new TlbCoClass(index, this.getPackageName(),
typeLibUtil, bindingMode);
this.writeTlbClass(tlbCoClass);
}
/**
* Log info.
*
* @param msg
* the msg
*/
public static void logInfo(String msg) {
System.out.println(msg);
}
}
@@ -0,0 +1,285 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Guid.CLSID;
import com.sun.jna.platform.win32.OaIdl;
import com.sun.jna.platform.win32.OaIdl.CURRENCY;
import com.sun.jna.platform.win32.OaIdl.DATE;
import com.sun.jna.platform.win32.OaIdl.DECIMAL;
import com.sun.jna.platform.win32.OaIdl.ELEMDESC;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.OaIdl.HREFTYPE;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TYPEDESC;
import com.sun.jna.platform.win32.Variant;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WTypes.LPSTR;
import com.sun.jna.platform.win32.WTypes.LPWSTR;
import com.sun.jna.platform.win32.WTypes.VARTYPE;
import com.sun.jna.platform.win32.WinBase.FILETIME;
import com.sun.jna.platform.win32.WinDef.BOOL;
import com.sun.jna.platform.win32.WinDef.CHAR;
import com.sun.jna.platform.win32.WinDef.INT_PTR;
import com.sun.jna.platform.win32.WinDef.LONG;
import com.sun.jna.platform.win32.WinDef.PVOID;
import com.sun.jna.platform.win32.WinDef.SCODE;
import com.sun.jna.platform.win32.WinDef.UCHAR;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinDef.UINT_PTR;
import com.sun.jna.platform.win32.WinDef.ULONG;
import com.sun.jna.platform.win32.WinDef.USHORT;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.platform.win32.COM.IDispatch;
import com.sun.jna.platform.win32.COM.ITypeInfo;
import com.sun.jna.platform.win32.COM.IUnknown;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeInfoUtil.TypeInfoDoc;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbFunction.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public abstract class TlbAbstractMethod extends TlbBase implements Variant {
protected TypeInfoDoc typeInfoDoc;
protected String methodName;
protected String docStr;
protected short vtableId;
protected MEMBERID memberid;
protected short paramCount;
protected String returnType;
protected String methodparams = "";
protected String methodvariables = "";
/**
* Instantiates a new tlb function.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @param funcDesc
* the func desc
* @param typeInfoUtil
* the type info util
*/
public TlbAbstractMethod(int index, TypeLibUtil typeLibUtil,
FUNCDESC funcDesc, TypeInfoUtil typeInfoUtil) {
super(index, typeLibUtil, typeInfoUtil);
this.typeInfoDoc = typeInfoUtil.getDocumentation(funcDesc.memid);
this.methodName = typeInfoDoc.getName();
this.docStr = typeInfoDoc.getDocString();
// get function values
this.vtableId = funcDesc.oVft.shortValue();
this.memberid = funcDesc.memid;
this.paramCount = funcDesc.cParams.shortValue();
this.returnType = this.getType(funcDesc);
}
public TypeInfoDoc getTypeInfoDoc() {
return typeInfoDoc;
}
public String getMethodName() {
return methodName;
}
public String getDocStr() {
return docStr;
}
/**
* Gets the var type.
*
* @param vt
* the vt
* @return the var type
*/
protected String getVarType(VARTYPE vt) {
switch (vt.intValue()) {
case VT_EMPTY:
return "";
case VT_NULL:
return "null";
case VT_I2:
return "short";
case VT_I4:
return "int";
case VT_R4:
return "float";
case VT_R8:
return "double";
case VT_CY:
return CURRENCY.class.getSimpleName();
case VT_DATE:
return DATE.class.getSimpleName();
case VT_BSTR:
return BSTR.class.getSimpleName();
case VT_DISPATCH:
return IDispatch.class.getSimpleName();
case VT_ERROR:
return SCODE.class.getSimpleName();
case VT_BOOL:
return BOOL.class.getSimpleName();
case VT_VARIANT:
return VARIANT.class.getSimpleName();
case VT_UNKNOWN:
return IUnknown.class.getSimpleName();
case VT_DECIMAL:
return DECIMAL.class.getSimpleName();
case VT_I1:
return CHAR.class.getSimpleName();
case VT_UI1:
return UCHAR.class.getSimpleName();
case VT_UI2:
return USHORT.class.getSimpleName();
case VT_UI4:
return UINT.class.getSimpleName();
case VT_I8:
return LONG.class.getSimpleName();
case VT_UI8:
return ULONG.class.getSimpleName();
case VT_INT:
return "int";
case VT_UINT:
return UINT.class.getSimpleName();
case VT_VOID:
return PVOID.class.getSimpleName();
case VT_HRESULT:
return HRESULT.class.getSimpleName();
case VT_PTR:
return Pointer.class.getSimpleName();
case VT_SAFEARRAY:
return "safearray";
case VT_CARRAY:
return "carray";
case VT_USERDEFINED:
return "userdefined";
case VT_LPSTR:
return LPSTR.class.getSimpleName();
case VT_LPWSTR:
return LPWSTR.class.getSimpleName();
case VT_RECORD:
return "record";
case VT_INT_PTR:
return INT_PTR.class.getSimpleName();
case VT_UINT_PTR:
return UINT_PTR.class.getSimpleName();
case VT_FILETIME:
return FILETIME.class.getSimpleName();
case VT_STREAM:
return "steam";
case VT_STORAGE:
return "storage";
case VT_STREAMED_OBJECT:
return "steamed_object";
case VT_STORED_OBJECT:
return "stored_object";
case VT_BLOB_OBJECT:
return "blob_object";
case VT_CF:
return "cf";
case VT_CLSID:
return CLSID.class.getSimpleName();
case VT_VERSIONED_STREAM:
return "";
// case VT_BSTR_BLOB:
// return "";
case VT_VECTOR:
return "";
case VT_ARRAY:
return "";
case VT_BYREF:
return PVOID.class.getSimpleName();
case VT_RESERVED:
return "";
case VT_ILLEGAL:
return "illegal";
/*
* case VT_ILLEGALMASKED: return "illegal_masked"; case VT_TYPEMASK:
* return "typemask";
*/default:
return null;
}
}
protected String getUserdefinedType(HREFTYPE hreftype) {
ITypeInfo refTypeInfo = this.typeInfoUtil.getRefTypeInfo(hreftype);
TypeInfoUtil typeInfoUtil = new TypeInfoUtil(refTypeInfo);
TypeInfoDoc documentation = typeInfoUtil
.getDocumentation(OaIdl.MEMBERID_NIL);
return documentation.getName();
}
protected String getType(FUNCDESC funcDesc) {
ELEMDESC elemDesc = funcDesc.elemdescFunc;
return this.getType(elemDesc);
}
protected String getType(ELEMDESC elemDesc) {
TYPEDESC _typeDesc = elemDesc.tdesc;
return this.getType(_typeDesc);
}
protected String getType(TYPEDESC typeDesc) {
VARTYPE vt = typeDesc.vt;
String type = "not_defined";
if (vt.intValue() == Variant.VT_PTR) {
TYPEDESC lptdesc = typeDesc._typedesc.getLptdesc();
type = this.getType(lptdesc);
} else if (vt.intValue() == Variant.VT_SAFEARRAY
|| vt.intValue() == Variant.VT_CARRAY) {
TYPEDESC tdescElem = typeDesc._typedesc.getLpadesc().tdescElem;
type = this.getType(tdescElem);
} else if (vt.intValue() == Variant.VT_USERDEFINED) {
HREFTYPE hreftype = typeDesc._typedesc.hreftype;
type = this.getUserdefinedType(hreftype);
} else {
type = this.getVarType(vt);
}
return type;
}
protected String replaceJavaKeyword(String name) {
if (name.equals("final"))
return "_" + name;
else if (name.equals("default"))
return "_" + name;
else if (name.equals("case"))
return "_" + name;
else if (name.equals("char"))
return "_" + name;
else if (name.equals("private"))
return "_" + name;
else if (name.equals("default"))
return "_" + name;
else
return name;
}
}
@@ -0,0 +1,281 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbBase.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public abstract class TlbBase {
/** The Constant CR. */
public final static String CR = "\n";
/** The Constant CRCR. */
public final static String CRCR = "\n\n";
/** The Constant TAB. */
public final static String TAB = "\t";
/** The Constant TABTAB. */
public final static String TABTAB = "\t\t";
/** The type lib util. */
protected TypeLibUtil typeLibUtil;
protected TypeInfoUtil typeInfoUtil;
/** The index. */
protected int index;
/** The template buffer. */
protected StringBuffer templateBuffer;
/** The class buffer. */
protected StringBuffer classBuffer;
/** The content. */
protected String content = "";
protected String filename = "DefaultFilename";
protected String name = "DefaultName";
/** The iunknown methods. */
public static String[] IUNKNOWN_METHODS = { "QueryInterface", "AddRef",
"Release" };
/** The idispatch methods. */
public static String[] IDISPATCH_METHODS = { "GetTypeInfoCount",
"GetTypeInfo", "GetIDsOfNames", "Invoke" };
protected String bindingMode = TlbConst.BINDING_MODE_DISPID;
public TlbBase(int index, TypeLibUtil typeLibUtil, TypeInfoUtil typeInfoUtil) {
this(index, typeLibUtil, typeInfoUtil, TlbConst.BINDING_MODE_DISPID);
}
public TlbBase(int index, TypeLibUtil typeLibUtil, TypeInfoUtil typeInfoUtil, String bindingMode) {
this.index = index;
this.typeLibUtil = typeLibUtil;
this.typeInfoUtil = typeInfoUtil;
this.bindingMode = bindingMode;
String filename = this.getClassTemplate();
try {
this.readTemplateFile(filename);
this.classBuffer = templateBuffer;
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Log error.
*
* @param msg
* the msg
*/
public void logError(String msg) {
this.log("ERROR", msg);
}
/**
* Log info.
*
* @param msg
* the msg
*/
public void logInfo(String msg) {
this.log("INFO", msg);
}
/**
* Gets the class buffer.
*
* @return the class buffer
*/
public StringBuffer getClassBuffer() {
return classBuffer;
}
/**
* Creates the content.
*
* @param content
* the content
*/
public void createContent(String content) {
this.replaceVariable("content", content);
}
public void setFilename(String filename) {
if (!filename.endsWith("java"))
filename += ".java";
this.filename = filename;
}
public String getFilename() {
return this.filename;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* Log.
*
* @param level
* the level
* @param msg
* the msg
*/
protected void log(String level, String msg) {
String _msg = level + " " + this.getTime() + " : " + msg;
System.out.println(_msg);
}
/**
* Gets the time.
*
* @return the time
*/
private String getTime() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return sdf.format(new Date());
}
/**
* Gets the class template.
*
* @return the class template
*/
abstract protected String getClassTemplate();
/**
* Read template file.
*
* @param filename
* the filename
* @throws IOException
* Signals that an I/O exception has occurred.
*/
protected void readTemplateFile(String filename) throws IOException {
this.templateBuffer = new StringBuffer();
BufferedReader reader = null;
try {
InputStream is = this.getClass().getClassLoader()
.getResourceAsStream(filename);
reader = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = reader.readLine()) != null)
this.templateBuffer.append(line + "\n");
} finally {
if (reader != null)
reader.close();
}
}
/**
* Replace variable.
*
* @param name
* the name
* @param value
* the value
*/
protected void replaceVariable(String name, String value) {
if (value == null)
value = "";
Pattern pattern = Pattern.compile("\\$\\{" + name + "\\}");
Matcher matcher = pattern.matcher(this.classBuffer);
String replacement = value;
String result = "";
while (matcher.find()) {
result = matcher.replaceAll(replacement);
}
if (result.length() > 0)
this.classBuffer = new StringBuffer(result);
}
protected void createPackageName(String packagename) {
this.replaceVariable("packagename", packagename);
}
/**
* Creates the class name.
*
* @param name
* the name
*/
protected void createClassName(String name) {
this.replaceVariable("classname", name);
}
/**
* Checks if is reserved method.
*
* @param method
* the method
* @return true, if is reserved method
*/
protected boolean isReservedMethod(String method) {
for (int i = 0; i < IUNKNOWN_METHODS.length; i++) {
if (IUNKNOWN_METHODS[i].equalsIgnoreCase(method))
return true;
}
for (int i = 0; i < IDISPATCH_METHODS.length; i++) {
if (IDISPATCH_METHODS[i].equalsIgnoreCase(method))
return true;
}
return false;
}
protected boolean isVTableMode() {
if(this.bindingMode.equalsIgnoreCase(TlbConst.BINDING_MODE_VTABLE))
return true;
else
return false;
}
protected boolean isDispIdMode() {
if(this.bindingMode.equalsIgnoreCase(TlbConst.BINDING_MODE_DISPID))
return true;
else
return false;
}
}
@@ -0,0 +1,107 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import java.util.Hashtable;
public class TlbCmdlineArgs extends Hashtable<String, String> implements
TlbConst {
public TlbCmdlineArgs(String[] args) {
this.readCmdArgs(args);
}
public int getIntParam(String key) {
String param = this.getRequiredParam(key);
return new Integer(param).intValue();
}
public String getParam(String key) {
return this.get(key);
}
public String getRequiredParam(String key) {
String param = this.getParam(key);
if (param == null)
throw new TlbParameterNotFoundException(
"Commandline parameter not found: " + key);
return param;
}
private void readCmdArgs(String[] args) {
if (args.length < 2)
this.showCmdHelp();
for (int i = 0; i < args.length;) {
String cmdName = args[i];
String cmdValue = args[i+1];
if (cmdName.startsWith("-") && !cmdValue.startsWith("-")) {
this.put(cmdName.substring(1), cmdValue);
i+=2;
}else {
this.showCmdHelp();
break;
}
}
}
public boolean isTlbFile() {
return this.containsKey(CMD_ARG_TYPELIB_FILE);
}
public boolean isTlbId() {
return this.containsKey(CMD_ARG_TYPELIB_ID);
}
public String getBindingMode() {
if(this.containsKey(CMD_ARG_BINDING_MODE))
return this.getParam(CMD_ARG_BINDING_MODE);
else
return BINDING_MODE_VTABLE;
}
public void showCmdHelp() {
String helpStr = "usage: TlbImp [-tlb.id -tlb.major.version -tlb.minor.version] [-tlb.file] [-bind.mode vTable, dispId] [-output.dir]"
+ CRCR
+ "options:"
+ CR
+ "-tlb.id The guid of the type library."
+ CR
+ "-tlb.major.version The major version of the type library."
+ CR
+ "-tlb.minor.version The minor version of the type library."
+ CR
+ "-tlb.file The file name containing the type library."
+ CR
+ "-bind.mode The binding mode used to create the Java code."
+ CR
+ "-output.dir The optional output directory, default is the user temp directory."
+ CRCR
+ "samples:"
+ CR
+ "Microsoft Shell Controls And Automation:"
+ CR
+ "-tlb.file shell32.dll"
+ CR
+ "-tlb.id {50A7E9B0-70EF-11D1-B75A-00A0C90564FE} -tlb.major.version 1 -tlb.minor.version 0"
+ CRCR
+ "Microsoft Word 12.0 Object Library:"
+ CR
+ "-tlb.id {00020905-0000-0000-C000-000000000046} -tlb.major.version 8 -tlb.minor.version 4"
+ CRCR;
System.out.println(helpStr);
System.exit(0);
}
}
@@ -0,0 +1,158 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.OaIdl.HREFTYPE;
import com.sun.jna.platform.win32.OaIdl.INVOKEKIND;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TYPEATTR;
import com.sun.jna.platform.win32.COM.ITypeInfo;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeInfoUtil.TypeInfoDoc;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil.TypeLibDoc;
// TODO: Auto-generated Javadoc
/**
* The Class TlbClass.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbCoClass extends TlbBase {
/**
* Instantiates a new tlb class.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
*/
public TlbCoClass(int index, String packagename, TypeLibUtil typeLibUtil, String bindingMode) {
super(index, typeLibUtil, null);
TypeInfoUtil typeInfoUtil = typeLibUtil.getTypeInfoUtil(index);
TypeLibDoc typeLibDoc = this.typeLibUtil.getDocumentation(index);
String docString = typeLibDoc.getDocString();
if(typeLibDoc.getName().length() > 0)
this.name = typeLibDoc.getName();
this.logInfo("Type of kind 'CoClass' found: " + this.name);
this.createPackageName(packagename);
this.createClassName(this.name);
this.setFilename(this.name);
String guidStr = this.typeLibUtil.getLibAttr().guid.toGuidString();
int majorVerNum = this.typeLibUtil.getLibAttr().wMajorVerNum.intValue();
int minorVerNum = this.typeLibUtil.getLibAttr().wMinorVerNum.intValue();
String version = majorVerNum + "." + minorVerNum;
String clsid = typeInfoUtil.getTypeAttr().guid.toGuidString();
this.createJavaDocHeader(guidStr, version, docString);
this.createCLSID(clsid);
this.createCLSIDName(this.name);
// Get the TypeAttributes
TYPEATTR typeAttr = typeInfoUtil.getTypeAttr();
int cImplTypes = typeAttr.cImplTypes.intValue();
String interfaces = "";
for (int i = 0; i < cImplTypes; i++) {
HREFTYPE refTypeOfImplType = typeInfoUtil.getRefTypeOfImplType(i);
ITypeInfo refTypeInfo = typeInfoUtil
.getRefTypeInfo(refTypeOfImplType);
TypeInfoUtil refTypeInfoUtil = new TypeInfoUtil(refTypeInfo);
this.createFunctions(refTypeInfoUtil, bindingMode);
TypeInfoDoc documentation = refTypeInfoUtil
.getDocumentation(new MEMBERID(-1));
interfaces += documentation.getName();
if (i < cImplTypes - 1)
interfaces += ", ";
}
this.createInterfaces(interfaces);
this.createContent(this.content);
}
protected void createFunctions(TypeInfoUtil typeInfoUtil, String bindingMode) {
TYPEATTR typeAttr = typeInfoUtil.getTypeAttr();
int cFuncs = typeAttr.cFuncs.intValue();
for (int i = 0; i < cFuncs; i++) {
// Get the function description
FUNCDESC funcDesc = typeInfoUtil.getFuncDesc(i);
TlbAbstractMethod method = null;
if (funcDesc.invkind.equals(INVOKEKIND.INVOKE_FUNC)) {
if(this.isVTableMode())
method = new TlbFunctionVTable(i, index, typeLibUtil, funcDesc, typeInfoUtil);
else
method = new TlbFunctionDispId(i, index, typeLibUtil, funcDesc, typeInfoUtil);
} else if (funcDesc.invkind.equals(INVOKEKIND.INVOKE_PROPERTYGET)) {
method = new TlbPropertyGet(i, index, typeLibUtil, funcDesc,
typeInfoUtil);
} else if (funcDesc.invkind.equals(INVOKEKIND.INVOKE_PROPERTYPUT)) {
method = new TlbPropertyPut(i, index, typeLibUtil, funcDesc,
typeInfoUtil);
} else if (funcDesc.invkind
.equals(INVOKEKIND.INVOKE_PROPERTYPUTREF)) {
method = new TlbPropertyPut(i, index, typeLibUtil, funcDesc,
typeInfoUtil);
}
if(!isReservedMethod(method.getMethodName()))
{
this.content += method.getClassBuffer();
if (i < cFuncs - 1)
this.content += CR;
}
// Release our function description stuff
typeInfoUtil.ReleaseFuncDesc(funcDesc);
}
}
protected void createJavaDocHeader(String guid, String version,
String helpstring) {
this.replaceVariable("uuid", guid);
this.replaceVariable("version", version);
this.replaceVariable("helpstring", helpstring);
}
protected void createCLSIDName(String clsidName) {
this.replaceVariable("clsidname", clsidName.toUpperCase());
}
protected void createCLSID(String clsid) {
this.replaceVariable("clsid", clsid);
}
protected void createInterfaces(String interfaces) {
this.replaceVariable("interfaces", interfaces);
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbCoClass.template";
}
}
@@ -0,0 +1,35 @@
package ${packagename};
import java.util.*;
import com.sun.jna.*;
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.WinNT.*;
import com.sun.jna.platform.win32.OaIdl.*;
import com.sun.jna.platform.win32.WinDef.*;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.*;
import com.sun.jna.platform.win32.COM.*;
import com.sun.jna.platform.win32.Guid.*;
/**
* uuid(${uuid})
* version(${version})
* helpstring(${helpstring})
* clsid(${clsid})
*
*/
public class ${classname} extends COMEarlyBindingObject implements ${interfaces} {
public static final CLSID ${clsidname}_CLSID = new CLSID("${clsid}");
public ${classname}() {
super(${clsidname}_CLSID, false, WTypes.CLSCTX_SERVER);
}
public ${classname}(CLSID clsid, boolean useActiveInstance, int dwClsContext) {
super(clsid, useActiveInstance, dwClsContext);
}
${content}
}
@@ -0,0 +1,54 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
public interface TlbConst {
public final static String CR = "\n";
public final static String CRCR = "\n\n";
public final static String TYPELIB_ID_SHELL = "{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}";
public final static String TYPELIB_MAJOR_VERSION_SHELL = "1";
public final static String TYPELIB_MINOR_VERSION_SHELL = "0";
public final static String TYPELIB_ID_WORD = "{00020905-0000-0000-C000-000000000046}";
public final static String TYPELIB_MAJOR_VERSION_WORD = "8";
public final static String TYPELIB_MINOR_VERSION_WORD = "4";
public final static String TYPELIB_ID_OFFICE = "{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}";
public final static String TYPELIB_MAJOR_VERSION_OFFICE = "2";
public final static String TYPELIB_MINOR_VERSION_OFFICE = "5";
public final static String CMD_ARG_TYPELIB_ID = "tlb.id";
public final static String CMD_ARG_BINDING_MODE = "bind.mode";
public final static String BINDING_MODE_VTABLE = "vtable";
public final static String BINDING_MODE_DISPID = "dispid";
public final static String CMD_ARG_TYPELIB_MAJOR_VERSION = "tlb.major.version";
public final static String CMD_ARG_TYPELIB_MINOR_VERSION = "tlb.minor.version";
public final static String CMD_ARG_TYPELIB_FILE = "tlb.file";
public final static String CMD_ARG_OUTPUT_DIR = "output.dir";
}
@@ -0,0 +1,131 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.OaIdl.HREFTYPE;
import com.sun.jna.platform.win32.OaIdl.INVOKEKIND;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TYPEATTR;
import com.sun.jna.platform.win32.WinDef.WORD;
import com.sun.jna.platform.win32.COM.ITypeInfo;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeInfoUtil.TypeInfoDoc;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil.TypeLibDoc;
// TODO: Auto-generated Javadoc
/**
* The Class TlbDispatch.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbDispInterface extends TlbBase {
/**
* Instantiates a new tlb dispatch.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
*/
public TlbDispInterface(int index, String packagename,
TypeLibUtil typeLibUtil) {
super(index, typeLibUtil, null);
TypeLibDoc typeLibDoc = this.typeLibUtil.getDocumentation(index);
String docString = typeLibDoc.getDocString();
if(typeLibDoc.getName().length() > 0)
this.name = typeLibDoc.getName();
this.logInfo("Type of kind 'DispInterface' found: " + this.name);
this.createPackageName(packagename);
this.createClassName(this.name);
this.setFilename(this.name);
// Get the TypeAttributes
TypeInfoUtil typeInfoUtil = typeLibUtil.getTypeInfoUtil(index);
TYPEATTR typeAttr = typeInfoUtil.getTypeAttr();
this.createJavaDocHeader(typeAttr.guid.toGuidString(), docString);
int cFuncs = typeAttr.cFuncs.intValue();
for (int i = 0; i < cFuncs; i++) {
// Get the function description
FUNCDESC funcDesc = typeInfoUtil.getFuncDesc(i);
// Get the member ID
MEMBERID memberID = funcDesc.memid;
// Get the name of the method
TypeInfoDoc typeInfoDoc2 = typeInfoUtil.getDocumentation(memberID);
String methodName = typeInfoDoc2.getName();
TlbAbstractMethod method = null;
if (!isReservedMethod(methodName)) {
if (funcDesc.invkind.equals(INVOKEKIND.INVOKE_FUNC)) {
method = new TlbFunctionStub(index, typeLibUtil, funcDesc,
typeInfoUtil);
} else if (funcDesc.invkind
.equals(INVOKEKIND.INVOKE_PROPERTYGET)) {
method = new TlbPropertyGetStub(index, typeLibUtil,
funcDesc, typeInfoUtil);
} else if (funcDesc.invkind
.equals(INVOKEKIND.INVOKE_PROPERTYPUT)) {
method = new TlbPropertyPutStub(index, typeLibUtil,
funcDesc, typeInfoUtil);
} else if (funcDesc.invkind
.equals(INVOKEKIND.INVOKE_PROPERTYPUTREF)) {
method = new TlbPropertyPutStub(index, typeLibUtil,
funcDesc, typeInfoUtil);
}
this.content += method.getClassBuffer();
if (i < cFuncs - 1)
this.content += CR;
}
// Release our function description stuff
typeInfoUtil.ReleaseFuncDesc(funcDesc);
}
this.createContent(this.content);
}
/**
* Creates the java doc header.
*
* @param guid
* the guid
* @param helpstring
* the helpstring
*/
protected void createJavaDocHeader(String guid, String helpstring) {
this.replaceVariable("uuid", guid);
this.replaceVariable("helpstring", helpstring);
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbDispInterface.template";
}
}
@@ -0,0 +1,24 @@
package ${packagename};
import java.util.*;
import com.sun.jna.*;
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.WinNT.*;
import com.sun.jna.platform.win32.OaIdl.*;
import com.sun.jna.platform.win32.WinDef.*;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.*;
import com.sun.jna.platform.win32.COM.*;
import com.sun.jna.platform.win32.Guid.*;
/**
* uuid(${uuid})
* version(${version})
* helpstring(${helpstring})
*
*/
public interface ${classname} extends IDispatch {
${content}
}
@@ -0,0 +1,109 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TYPEATTR;
import com.sun.jna.platform.win32.OaIdl.VARDESC;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeInfoUtil.TypeInfoDoc;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil.TypeLibDoc;
// TODO: Auto-generated Javadoc
/**
* The Class TlbEnum.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbEnum extends TlbBase {
/**
* Instantiates a new tlb enum.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
*/
public TlbEnum(int index, String packagename, TypeLibUtil typeLibUtil) {
super(index, typeLibUtil, null);
TypeLibDoc typeLibDoc = this.typeLibUtil.getDocumentation(index);
String docString = typeLibDoc.getDocString();
if (typeLibDoc.getName().length() > 0)
this.name = typeLibDoc.getName();
this.logInfo("Type of kind 'Enum' found: " + this.name);
this.createPackageName(packagename);
this.createClassName(this.name);
this.setFilename(this.name);
// Get the TypeAttributes
TypeInfoUtil typeInfoUtil = typeLibUtil.getTypeInfoUtil(index);
TYPEATTR typeAttr = typeInfoUtil.getTypeAttr();
this.createJavaDocHeader(typeAttr.guid.toGuidString(), docString);
int cVars = typeAttr.cVars.intValue();
for (int i = 0; i < cVars; i++) {
// Get the property description
VARDESC varDesc = typeInfoUtil.getVarDesc(i);
VARIANT constValue = varDesc._vardesc.lpvarValue;
Object value = constValue.getValue();
// Get the member ID
MEMBERID memberID = varDesc.memid;
// Get the name of the property
TypeInfoDoc typeInfoDoc2 = typeInfoUtil.getDocumentation(memberID);
this.content += TABTAB + "//" + typeInfoDoc2.getName() + CR;
this.content += TABTAB + "public static final int "
+ typeInfoDoc2.getName() + " = " + value.toString() + ";";
if (i < cVars - 1)
this.content += CR;
// release the pointer
typeInfoUtil.ReleaseVarDesc(varDesc);
}
this.createContent(this.content);
}
/**
* Creates the java doc header.
*
* @param guid
* the guid
* @param helpstring
* the helpstring
*/
protected void createJavaDocHeader(String guid, String helpstring) {
this.replaceVariable("uuid", guid);
this.replaceVariable("helpstring", helpstring);
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbEnum.template";
}
}
@@ -0,0 +1,46 @@
package ${packagename};
import java.util.List;
import java.util.Arrays;
import com.sun.jna.*;
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.WinNT.*;
import com.sun.jna.platform.win32.OaIdl.*;
import com.sun.jna.platform.win32.WinDef.*;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.*;
import com.sun.jna.platform.win32.COM.*;
import com.sun.jna.platform.win32.Guid.*;
/**
* uuid(${uuid})
* helpstring(${helpstring})
*
*/
public class ${classname} extends Structure {
public static class ByReference extends ${classname} implements
Structure.ByReference {
}
public int value;
public ${classname}() {
}
public ${classname}(int value) {
this.value = value;
}
public ${classname}(Pointer pointer) {
super(pointer);
this.read();
}
${content}
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] { "value" });
}
}
@@ -0,0 +1,92 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.ELEMDESC;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbFunction.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbFunctionDispId extends TlbAbstractMethod {
/**
* Instantiates a new tlb function.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @param funcDesc
* the func desc
* @param typeInfoUtil
* the type info util
*/
public TlbFunctionDispId(int count, int index, TypeLibUtil typeLibUtil,
FUNCDESC funcDesc, TypeInfoUtil typeInfoUtil) {
super(index, typeLibUtil, funcDesc, typeInfoUtil);
String[] names = typeInfoUtil.getNames(funcDesc.memid, paramCount + 1);
for (int i = 0; i < paramCount; i++) {
ELEMDESC elemdesc = funcDesc.lprgelemdescParam.elemDescArg[i];
String methodName = names[i + 1].toLowerCase();
String type = this.getType(elemdesc.tdesc);
String _methodName = this.replaceJavaKeyword(methodName);
methodparams += type + " " + _methodName;
//wrap all in a VARIANT
if(type.equals("VARIANT"))
methodvariables += _methodName;
else
methodvariables += "new VARIANT(" + _methodName + ")";
// if there is more than 1 param
if (i < (paramCount - 1)) {
methodparams += ", ";
methodvariables += ", ";
}
}
String returnValue;
if(this.returnType.equalsIgnoreCase("VARIANT"))
returnValue = "pResult";
else
returnValue = "((" + returnType + ") pResult.getValue())";
this.replaceVariable("helpstring", docStr);
this.replaceVariable("returntype", returnType);
this.replaceVariable("returnvalue", returnValue);
this.replaceVariable("methodname", methodName);
this.replaceVariable("methodparams", methodparams);
this.replaceVariable("methodvariables", methodvariables);
this.replaceVariable("vtableid", String.valueOf(vtableId));
this.replaceVariable("memberid", String.valueOf(memberid));
this.replaceVariable("functionCount", String.valueOf(count));
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbFunctionDispId.template";
}
}
@@ -0,0 +1,10 @@
/**
* ${helpstring}
* Virtual table id: ${vtableid}
* Member id: ${memberid}
*/
public ${returntype} ${methodname}(${methodparams}) {
VARIANT.ByReference pResult = new VARIANT.ByReference();
this.oleMethod(OleAuto.DISPATCH_METHOD, pResult, getIDispatch(), new DISPID(${memberid}), new VARIANT[] {${methodvariables}});
return ${returnvalue};
}
@@ -0,0 +1,85 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.ELEMDESC;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeInfoUtil.TypeInfoDoc;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbFunction.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbFunctionStub extends TlbAbstractMethod {
/**
* Instantiates a new tlb function.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @param funcDesc
* the func desc
* @param typeInfoUtil
* the type info util
*/
public TlbFunctionStub(int index, TypeLibUtil typeLibUtil,
FUNCDESC funcDesc, TypeInfoUtil typeInfoUtil) {
super(index, typeLibUtil, funcDesc, typeInfoUtil);
TypeInfoDoc typeInfoDoc = typeInfoUtil.getDocumentation(funcDesc.memid);
String methodname = typeInfoDoc.getName();
String docStr = typeInfoDoc.getDocString();
String[] names = typeInfoUtil.getNames(funcDesc.memid, paramCount + 1);
// if there is at least one param we need a comma
if (paramCount > 0)
methodvariables = ", ";
for (int i = 0; i < paramCount; i++) {
ELEMDESC elemdesc = funcDesc.lprgelemdescParam.elemDescArg[i];
String methodName = names[i + 1].toLowerCase();
methodparams += this.getType(elemdesc.tdesc) + " "
+ this.replaceJavaKeyword(methodName);
methodvariables += methodName;
// if there is more than 1 param
if (i < (paramCount - 1)) {
methodparams += ", ";
methodvariables += ", ";
}
}
this.replaceVariable("helpstring", docStr);
this.replaceVariable("returntype", returnType);
this.replaceVariable("methodname", methodname);
this.replaceVariable("methodparams", methodparams);
this.replaceVariable("vtableid", String.valueOf(vtableId));
this.replaceVariable("memberid", String.valueOf(memberid));
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbFunctionStub.template";
}
}
@@ -0,0 +1,6 @@
/**
* ${helpstring}
* Virtual table id: ${vtableid}
* Member id: ${memberid}
*/
public ${returntype} ${methodname}(${methodparams});
@@ -0,0 +1,83 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.ELEMDESC;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbFunction.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbFunctionVTable extends TlbAbstractMethod {
/**
* Instantiates a new tlb function.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @param funcDesc
* the func desc
* @param typeInfoUtil
* the type info util
*/
public TlbFunctionVTable(int count, int index, TypeLibUtil typeLibUtil,
FUNCDESC funcDesc, TypeInfoUtil typeInfoUtil) {
super(index, typeLibUtil, funcDesc, typeInfoUtil);
String[] names = typeInfoUtil.getNames(funcDesc.memid, paramCount + 1);
// if there is at least one param we need a comma
if (paramCount > 0)
methodvariables = ", ";
for (int i = 0; i < paramCount; i++) {
ELEMDESC elemdesc = funcDesc.lprgelemdescParam.elemDescArg[i];
String methodName = names[i + 1].toLowerCase();
methodparams += this.getType(elemdesc.tdesc) + " "
+ this.replaceJavaKeyword(methodName);
methodvariables += methodName;
// if there is more than 1 param
if (i < (paramCount - 1)) {
methodparams += ", ";
methodvariables += ", ";
}
}
this.replaceVariable("helpstring", docStr);
this.replaceVariable("returntype", returnType);
this.replaceVariable("methodname", methodName);
this.replaceVariable("methodparams", methodparams);
this.replaceVariable("methodvariables", methodvariables);
this.replaceVariable("vtableid", String.valueOf(vtableId));
this.replaceVariable("memberid", String.valueOf(memberid));
this.replaceVariable("functionCount", String.valueOf(count));
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbFunctionVTable.template";
}
}
@@ -0,0 +1,8 @@
/**
* ${helpstring}
* Virtual table id: ${vtableid}
* Member id: ${memberid}
*/
public ${returntype} ${methodname}(${methodparams}) {
return (${returntype})this._invokeNativeObject(${functionCount}, new Object[] { this.getPointer()${methodvariables}}, ${returntype}.class);
}
@@ -0,0 +1,106 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
import com.sun.jna.platform.win32.OaIdl.TYPEATTR;
import com.sun.jna.platform.win32.OaIdl.VARDESC;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeInfoUtil.TypeInfoDoc;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil.TypeLibDoc;
// TODO: Auto-generated Javadoc
/**
* The Class TlbInterface.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbInterface extends TlbBase {
/**
* Instantiates a new tlb interface.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
*/
public TlbInterface(int index, String packagename, TypeLibUtil typeLibUtil) {
super(index, typeLibUtil, null);
TypeLibDoc typeLibDoc = this.typeLibUtil.getDocumentation(index);
String docString = typeLibDoc.getDocString();
if (typeLibDoc.getName().length() > 0)
this.name = typeLibDoc.getName();
this.logInfo("Type of kind 'Interface' found: " + this.name);
this.createPackageName(packagename);
this.createClassName(this.name);
this.setFilename(this.name);
// Get the TypeAttributes
TypeInfoUtil typeInfoUtil = typeLibUtil.getTypeInfoUtil(index);
TYPEATTR typeAttr = typeInfoUtil.getTypeAttr();
this.createJavaDocHeader(typeAttr.guid.toGuidString(), docString);
int cVars = typeAttr.cVars.intValue();
for (int i = 0; i < cVars; i++) {
// Get the property description
VARDESC varDesc = typeInfoUtil.getVarDesc(i);
VARIANT constValue = varDesc._vardesc.lpvarValue;
Object value = constValue.getValue();
// Get the member ID
MEMBERID memberID = varDesc.memid;
// Get the name of the property
TypeInfoDoc typeInfoDoc2 = typeInfoUtil.getDocumentation(memberID);
this.content += TABTAB + "//" + typeInfoDoc2.getName() + CR;
this.content += TABTAB + "public static final int "
+ typeInfoDoc2.getName() + " = " + value.toString() + ";";
if (i < cVars - 1)
this.content += CR;
}
this.createContent(this.content);
}
/**
* Creates the java doc header.
*
* @param guid
* the guid
* @param helpstring
* the helpstring
*/
protected void createJavaDocHeader(String guid, String helpstring) {
this.replaceVariable("uuid", guid);
this.replaceVariable("helpstring", helpstring);
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbInterface.template";
}
}
@@ -0,0 +1,23 @@
package ${packagename};
import java.util.*;
import com.sun.jna.*;
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.OaIdl.*;
import com.sun.jna.platform.win32.WinDef.*;
import com.sun.jna.platform.win32.Variant.VARIANT;
import com.sun.jna.platform.win32.WTypes.*;
import com.sun.jna.platform.win32.COM.*;
import com.sun.jna.platform.win32.Guid.*;
/**
* uuid(${uuid})
* version(${version})
* helpstring(${helpstring})
*
*/
public interface ${classname} extends IUnknown {
${content}
}
@@ -0,0 +1,31 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
public class TlbParameterNotFoundException extends RuntimeException {
public TlbParameterNotFoundException() {
}
public TlbParameterNotFoundException(String msg) {
super(msg);
}
public TlbParameterNotFoundException(Throwable cause) {
super(cause);
}
public TlbParameterNotFoundException(String msg, Throwable cause) {
super(msg, cause);
}
}
@@ -0,0 +1,62 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbPropertyGet.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbPropertyGet extends TlbAbstractMethod {
/**
* Instantiates a new tlb property get.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @param funcDesc
* the func desc
* @param typeInfoUtil
* the type info util
*/
public TlbPropertyGet(int count, int index, TypeLibUtil typeLibUtil,
FUNCDESC funcDesc, TypeInfoUtil typeInfoUtil) {
super(index, typeLibUtil, funcDesc, typeInfoUtil);
this.methodName = "get" + this.getMethodName();
this.replaceVariable("helpstring", docStr);
this.replaceVariable("returntype", returnType);
this.replaceVariable("methodname", methodName);
this.replaceVariable("vtableid", String.valueOf(vtableId));
this.replaceVariable("memberid", String.valueOf(memberid));
this.replaceVariable("functionCount", String.valueOf(count));
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbPropertyGet.template";
}
}
@@ -0,0 +1,8 @@
/**
* ${helpstring}
* Virtual table id: ${vtableid}
* Member id: ${memberid}
*/
public ${returntype} ${methodname}() {
return (${returntype})this._invokeNativeObject(${functionCount}, new Object[] { this.getPointer() }, ${returntype}.class);
}
@@ -0,0 +1,64 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeInfoUtil.TypeInfoDoc;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbPropertyGet.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbPropertyGetStub extends TlbAbstractMethod {
/**
* Instantiates a new tlb property get.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @param funcDesc
* the func desc
* @param typeInfoUtil
* the type info util
*/
public TlbPropertyGetStub(int index, TypeLibUtil typeLibUtil,
FUNCDESC funcDesc, TypeInfoUtil typeInfoUtil) {
super(index, typeLibUtil, funcDesc, typeInfoUtil);
TypeInfoDoc typeInfoDoc = typeInfoUtil.getDocumentation(funcDesc.memid);
String docStr = typeInfoDoc.getDocString();
String methodname = "get" + typeInfoDoc.getName();
this.replaceVariable("helpstring", docStr);
this.replaceVariable("returntype", returnType);
this.replaceVariable("methodname", methodname);
this.replaceVariable("vtableid", String.valueOf(vtableId));
this.replaceVariable("memberid", String.valueOf(memberid));
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbPropertyGetStub.template";
}
}
@@ -0,0 +1,6 @@
/**
* ${helpstring}
* Virtual table id: ${vtableid}
* Member id: ${memberid}
*/
public ${returntype} ${methodname}();
@@ -0,0 +1,82 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.ELEMDESC;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbPropertyPut.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbPropertyPut extends TlbAbstractMethod {
/**
* Instantiates a new tlb property set.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @param funcDesc
* the func desc
* @param typeInfoUtil
* the type info util
*/
public TlbPropertyPut(int count, int index, TypeLibUtil typeLibUtil,
FUNCDESC funcDesc, TypeInfoUtil typeInfoUtil) {
super(index, typeLibUtil, funcDesc, typeInfoUtil);
this.methodName = "set" + getMethodName();
String[] names = typeInfoUtil.getNames(funcDesc.memid, paramCount + 1);
if (paramCount > 0)
methodvariables += ", ";
for (int i = 0; i < paramCount; i++) {
ELEMDESC elemdesc = funcDesc.lprgelemdescParam.elemDescArg[i];
String varType = this.getType(elemdesc);
methodparams += varType + " "
+ this.replaceJavaKeyword(names[i].toLowerCase());
methodvariables += this.replaceJavaKeyword(names[i].toLowerCase());
// if there is more than 1 param
if (i < (paramCount - 1)) {
methodparams += ", ";
methodvariables += ", ";
}
}
this.replaceVariable("helpstring", docStr);
this.replaceVariable("methodname", methodName);
this.replaceVariable("methodparams", methodparams);
this.replaceVariable("methodvariables", methodvariables);
this.replaceVariable("vtableid", String.valueOf(vtableId));
this.replaceVariable("memberid", String.valueOf(memberid));
this.replaceVariable("functionCount", String.valueOf(count));
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbPropertyPut.template";
}
}
@@ -0,0 +1,8 @@
/**
* ${helpstring}
* Virtual table id: ${vtableid}
* Member id: ${memberid}
*/
public void ${methodname}(${methodparams}) {
this._invokeNativeInt(${functionCount}, new Object[] { this.getPointer()${methodvariables}});
}
@@ -0,0 +1,78 @@
/* Copyright (c) 2013 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32.COM.tlb.imp;
import com.sun.jna.platform.win32.OaIdl.ELEMDESC;
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
import com.sun.jna.platform.win32.COM.TypeInfoUtil;
import com.sun.jna.platform.win32.COM.TypeInfoUtil.TypeInfoDoc;
import com.sun.jna.platform.win32.COM.TypeLibUtil;
// TODO: Auto-generated Javadoc
/**
* The Class TlbPropertyPut.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class TlbPropertyPutStub extends TlbAbstractMethod {
/**
* Instantiates a new tlb property set.
*
* @param index
* the index
* @param typeLibUtil
* the type lib util
* @param funcDesc
* the func desc
* @param typeInfoUtil
* the type info util
*/
public TlbPropertyPutStub(int index, TypeLibUtil typeLibUtil,
FUNCDESC funcDesc, TypeInfoUtil typeInfoUtil) {
super(index, typeLibUtil, funcDesc, typeInfoUtil);
TypeInfoDoc typeInfoDoc = typeInfoUtil.getDocumentation(funcDesc.memid);
String docStr = typeInfoDoc.getDocString();
String methodname = "set" + typeInfoDoc.getName();
String[] names = typeInfoUtil.getNames(funcDesc.memid, paramCount + 1);
for (int i = 0; i < paramCount; i++) {
ELEMDESC elemdesc = funcDesc.lprgelemdescParam.elemDescArg[i];
String varType = this.getType(elemdesc);
methodparams += varType + " "
+ this.replaceJavaKeyword(names[i].toLowerCase());
// if there is more than 1 param
if (i < (paramCount - 1)) {
methodparams += ", ";
}
}
this.replaceVariable("helpstring", docStr);
this.replaceVariable("methodname", methodname);
this.replaceVariable("methodparams", methodparams);
this.replaceVariable("vtableid", String.valueOf(vtableId));
this.replaceVariable("memberid", String.valueOf(memberid));
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.platform.win32.COM.tlb.imp.TlbBase#getClassTemplate()
*/
@Override
protected String getClassTemplate() {
return "com/sun/jna/platform/win32/COM/tlb/imp/TlbPropertyPutStub.template";
}
}
@@ -0,0 +1,6 @@
/**
* ${helpstring}
* Virtual table id: ${vtableid}
* Member id: ${memberid}
*/
public void ${methodname}(${methodparams});
@@ -0,0 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head></head>
<body>
Provides...
</body>
</html>
@@ -0,0 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head></head>
<body>
Provides...
</body>
</html>
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
@@ -22,23 +22,25 @@ import com.sun.jna.platform.win32.Guid.GUID;
import com.sun.jna.platform.win32.WinNT.PSID;
import com.sun.jna.win32.StdCallLibrary;
/**
* Ported from DsGetDC.h.
* Windows SDK 6.0a
* @author dblock[at]dblock.org
* Ported from DsGetDC.h. Windows SDK 6.0a
*
* @author dblock[at]dblock.org
*/
public interface DsGetDC extends StdCallLibrary {
/**
* The DOMAIN_CONTROLLER_INFO structure is used with the DsGetDcName
* The DOMAIN_CONTROLLER_INFO structure is used with the DsGetDcName
* function to receive data about a domain controller.
*/
public static class DOMAIN_CONTROLLER_INFO extends Structure {
public static class ByReference extends DOMAIN_CONTROLLER_INFO implements Structure.ByReference { }
public DOMAIN_CONTROLLER_INFO() { }
public static class ByReference extends DOMAIN_CONTROLLER_INFO
implements Structure.ByReference {
}
public DOMAIN_CONTROLLER_INFO() {
}
public DOMAIN_CONTROLLER_INFO(Pointer memory) {
super(memory);
@@ -46,85 +48,95 @@ public interface DsGetDC extends StdCallLibrary {
}
/**
* Pointer to a null-terminated WString that specifies the computer name
* of the discovered domain controller. The returned computer name is
* prefixed with "\\". The DNS-style name, for example, "\\phoenix.fabrikam.com",
* is returned, if available. If the DNS-style name is not available, the
* flat-style name (for example, "\\phoenix") is returned. This example would apply
* if the domain is a Windows NT 4.0 domain or if the domain does not support the
* IP family of protocols.
* Pointer to a null-terminated WString that specifies the computer name
* of the discovered domain controller. The returned computer name is
* prefixed with "\\". The DNS-style name, for example,
* "\\phoenix.fabrikam.com", is returned, if available. If the DNS-style
* name is not available, the flat-style name (for example, "\\phoenix")
* is returned. This example would apply if the domain is a Windows NT
* 4.0 domain or if the domain does not support the IP family of
* protocols.
*/
public WString DomainControllerName;
/**
* Pointer to a null-terminated WString that specifies the address of the discovered
* domain controller. The address is prefixed with "\\". This WString is one of the
* types defined by the DomainControllerAddressType member.
* Pointer to a null-terminated WString that specifies the address of
* the discovered domain controller. The address is prefixed with "\\".
* This WString is one of the types defined by the
* DomainControllerAddressType member.
*/
public WString DomainControllerAddress;
/**
* Indicates the type of WString that is contained in the DomainControllerAddress member.
* Indicates the type of WString that is contained in the
* DomainControllerAddress member.
*/
public int DomainControllerAddressType;
/**
* The GUID of the domain. This member is zero if the domain controller does not have
* a Domain GUID; for example, the domain controller is not a Windows 2000 domain
* controller.
* The GUID of the domain. This member is zero if the domain controller
* does not have a Domain GUID; for example, the domain controller is
* not a Windows 2000 domain controller.
*/
public GUID DomainGuid;
/**
* Pointer to a null-terminated WString that specifies the name of the domain. The
* DNS-style name, for example, "fabrikam.com", is returned if available. Otherwise,
* the flat-style name, for example, "fabrikam", is returned. This name may be different
* than the requested domain name if the domain has been renamed.
* Pointer to a null-terminated WString that specifies the name of the
* domain. The DNS-style name, for example, "fabrikam.com", is returned
* if available. Otherwise, the flat-style name, for example,
* "fabrikam", is returned. This name may be different than the
* requested domain name if the domain has been renamed.
*/
public WString DomainName;
/**
* Pointer to a null-terminated WString that specifies the name of the domain at the root
* of the DS tree. The DNS-style name, for example, "fabrikam.com", is returned if
* available. Otherwise, the flat-style name, for example, "fabrikam" is returned.
* Pointer to a null-terminated WString that specifies the name of the
* domain at the root of the DS tree. The DNS-style name, for example,
* "fabrikam.com", is returned if available. Otherwise, the flat-style
* name, for example, "fabrikam" is returned.
*/
public WString DnsForestName;
/**
* Contains a set of flags that describe the domain controller.
* Contains a set of flags that describe the domain controller.
*/
public int Flags;
/**
* Pointer to a null-terminated WString that specifies the name of the site where the
* domain controller is located. This member may be NULL if the domain controller is
* not in a site; for example, the domain controller is a Windows NT 4.0 domain
* controller.
* Pointer to a null-terminated WString that specifies the name of the
* site where the domain controller is located. This member may be NULL
* if the domain controller is not in a site; for example, the domain
* controller is a Windows NT 4.0 domain controller.
*/
public WString DcSiteName;
/**
* Pointer to a null-terminated WString that specifies the name of the site that the
* computer belongs to. The computer is specified in the ComputerName parameter passed
* to DsGetDcName. This member may be NULL if the site that contains the computer
* cannot be found; for example, if the DS administrator has not associated the
* subnet that the computer is in with a valid site.
* Pointer to a null-terminated WString that specifies the name of the
* site that the computer belongs to. The computer is specified in the
* ComputerName parameter passed to DsGetDcName. This member may be NULL
* if the site that contains the computer cannot be found; for example,
* if the DS administrator has not associated the subnet that the
* computer is in with a valid site.
*/
public WString ClientSiteName;
protected List getFieldOrder() {
return Arrays.asList(new String[] { "DomainControllerName", "DomainControllerAddress", "DomainControllerAddressType", "DomainGuid", "DomainName", "DnsForestName", "Flags", "DcSiteName", "ClientSiteName"});
return Arrays.asList(new String[] { "DomainControllerName",
"DomainControllerAddress", "DomainControllerAddressType",
"DomainGuid", "DomainName", "DnsForestName", "Flags",
"DcSiteName", "ClientSiteName" });
}
}
}
/**
* Pointer to DOMAIN_CONTROLLER_INFO.
*/
public static class PDOMAIN_CONTROLLER_INFO extends Structure {
public static class ByReference extends PDOMAIN_CONTROLLER_INFO implements Structure.ByReference {
public static class ByReference extends PDOMAIN_CONTROLLER_INFO
implements Structure.ByReference {
}
public DOMAIN_CONTROLLER_INFO.ByReference dci;
protected List getFieldOrder() {
return Arrays.asList(new String[] { "dci" });
}
}
/**
* Domain is a member of the forest.
*/
@@ -136,7 +148,7 @@ public interface DsGetDC extends StdCallLibrary {
/**
* Domain is root of a tree in the forest.
*/
int DS_DOMAIN_TREE_ROOT = 0x0004;
int DS_DOMAIN_TREE_ROOT = 0x0004;
/**
* Domain is the primary domain of queried server.
*/
@@ -152,51 +164,55 @@ public interface DsGetDC extends StdCallLibrary {
/**
* Valid domain flags.
*/
int DS_DOMAIN_VALID_FLAGS =
DS_DOMAIN_IN_FOREST |
DS_DOMAIN_DIRECT_OUTBOUND |
DS_DOMAIN_TREE_ROOT |
DS_DOMAIN_PRIMARY |
DS_DOMAIN_NATIVE_MODE |
DS_DOMAIN_DIRECT_INBOUND;
int DS_DOMAIN_VALID_FLAGS = DS_DOMAIN_IN_FOREST | DS_DOMAIN_DIRECT_OUTBOUND
| DS_DOMAIN_TREE_ROOT | DS_DOMAIN_PRIMARY | DS_DOMAIN_NATIVE_MODE
| DS_DOMAIN_DIRECT_INBOUND;
/**
* The DS_DOMAIN_TRUSTS structure is used with the DsEnumerateDomainTrusts function to
* contain trust data for a domain.
* The DS_DOMAIN_TRUSTS structure is used with the DsEnumerateDomainTrusts
* function to contain trust data for a domain.
*/
public static class DS_DOMAIN_TRUSTS extends Structure {
public static class ByReference extends DS_DOMAIN_TRUSTS implements Structure.ByReference {
public static class ByReference extends DS_DOMAIN_TRUSTS implements
Structure.ByReference {
}
/**
* Pointer to a null-terminated string that contains the NetBIOS name of the domain.
* Pointer to a null-terminated string that contains the NetBIOS name of
* the domain.
*/
public WString NetbiosDomainName;
/**
* Pointer to a null-terminated string that contains the DNS name of the domain. This member may be NULL.
* Pointer to a null-terminated string that contains the DNS name of the
* domain. This member may be NULL.
*/
public WString DnsDomainName;
/**
* Contains a set of flags that specify more data about the domain trust.
*/
* Contains a set of flags that specify more data about the domain
* trust.
*/
public int Flags;
/**
* Contains the index in the Domains array returned by the DsEnumerateDomainTrusts function that
* corresponds to the parent domain of the domain represented by this structure.
* Contains the index in the Domains array returned by the
* DsEnumerateDomainTrusts function that corresponds to the parent
* domain of the domain represented by this structure.
*/
public int ParentIndex;
/**
* Contains a value that indicates the type of trust represented by this structure.
* Contains a value that indicates the type of trust represented by this
* structure.
*/
public int TrustType;
public int TrustType;
/**
* Contains a value that indicates the attributes of the trust represented by this structure.
* Contains a value that indicates the attributes of the trust
* represented by this structure.
*/
public int TrustAttributes;
/**
* Contains the security identifier of the domain represented by this structure.
* Contains the security identifier of the domain represented by this
* structure.
*/
public PSID.ByReference DomainSid;
@@ -204,9 +220,11 @@ public interface DsGetDC extends StdCallLibrary {
* Contains the GUID of the domain represented by this structure.
*/
public GUID DomainGuid;
protected List getFieldOrder() {
return Arrays.asList(new String[] { "NetbiosDomainName", "DnsDomainName", "Flags", "ParentIndex", "TrustType", "TrustAttributes", "DomainSid", "DomainGuid" });
protected List getFieldOrder() {
return Arrays.asList(new String[] { "NetbiosDomainName",
"DnsDomainName", "Flags", "ParentIndex", "TrustType",
"TrustAttributes", "DomainSid", "DomainGuid" });
}
public DS_DOMAIN_TRUSTS() {
@@ -0,0 +1,508 @@
/*
* Copyright 2014 Martin Steiger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jna.platform.win32;
import java.util.HashMap;
import com.sun.jna.DefaultTypeMapper;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.platform.EnumConverter;
import com.sun.jna.platform.win32.WTypes.LPSTR;
import com.sun.jna.platform.win32.WinDef.BOOL;
import com.sun.jna.platform.win32.WinDef.BYTE;
import com.sun.jna.platform.win32.WinDef.DWORD;
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinUser.HMONITOR;
import com.sun.jna.win32.StdCallLibrary;
/**
* A port of dxva2.dll
* @author Martin Steiger
*/
public interface Dxva2 extends StdCallLibrary, PhysicalMonitorEnumerationAPI, HighLevelMonitorConfigurationAPI, LowLevelMonitorConfigurationAPI
{
/**
* The only instance of the library
*/
Dxva2 INSTANCE = (Dxva2) Native.loadLibrary("Dxva2", Dxva2.class, new HashMap<String, Object>()
{
private static final long serialVersionUID = -1987971664975780480L;
{
put(Library.OPTION_TYPE_MAPPER, new DefaultTypeMapper()
{
{
addTypeConverter(MC_POSITION_TYPE.class, new EnumConverter<>(MC_POSITION_TYPE.class));
addTypeConverter(MC_SIZE_TYPE.class, new EnumConverter<>(MC_SIZE_TYPE.class));
addTypeConverter(MC_GAIN_TYPE.class, new EnumConverter<>(MC_GAIN_TYPE.class));
addTypeConverter(MC_DRIVE_TYPE.class, new EnumConverter<>(MC_DRIVE_TYPE.class));
}
});
}
});
/******************************************************************************
Monitor capability functions
******************************************************************************/
/**
* Retrieves the configuration capabilities of a monitor. Call this function to find out which high-level
* monitor configuration functions are supported by the monitor.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call
* {@link #GetPhysicalMonitorsFromHMONITOR}
* @param pdwMonitorCapabilities Receives a bitwise OR of capabilities flags. (MC_CAPS_*)
* @param pdwSupportedColorTemperatures Receives a bitwise OR of color temperature flags.
* (MC_SUPPORTED_COLOR_TEMPERATURE_*)
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is
* FALSE. To get extended error information, call GetLastError.
* <br/><br/>
* The function fails if the monitor does not support DDC/CI.
*/
BOOL GetMonitorCapabilities(HANDLE hMonitor, DWORDByReference pdwMonitorCapabilities, DWORDByReference pdwSupportedColorTemperatures);
/******************************************************************************
Monitor setting persistence functions
******************************************************************************/
/**
* Saves the current monitor settings to the display's nonvolatile storage.
* <br/><br/>
* This function takes about 200 milliseconds to return.
* This high-level function is identical to the low-level function SaveCurrentSettings.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL SaveCurrentMonitorSettings(HANDLE hMonitor);
/******************************************************************************
Monitor meta-data functions
******************************************************************************/
/**
* Retrieves the type of technology used by a monitor.
* This function does not support every display technology. If a monitor uses a display technology that is
* supported by this function, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_TECHNOLOGY_TYPE
* flag. If that flag is absent, the GetMonitorTechnologyType function fails.
* Some monitor technologies do not support certain monitor configuration functions. For example,
* the DegaussMonitor function is supported only for cathode ray tube (CRT) monitors. To find out whether a
* specific function is supported, call GetMonitorCapabilities.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param pdtyDisplayTechnologyType Receives the technology type as defined in {@link HighLevelMonitorConfigurationAPI.MC_DISPLAY_TECHNOLOGY_TYPE}.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL GetMonitorTechnologyType(HANDLE hMonitor, MC_DISPLAY_TECHNOLOGY_TYPE.ByReference pdtyDisplayTechnologyType);
/******************************************************************************
Monitor image calibration functions
******************************************************************************/
/**
* Retrieves a monitor's minimum, maximum, and current brightness settings.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_BRIGHTNESS flag.
* This function takes about 40 milliseconds to return. The brightness setting is a continuous monitor setting.
* @param hMonitor Handle to a physical monitor
* @param pdwMinimumBrightness Receives the monitor's minimum brightness.
* @param pdwCurrentBrightness Receives the monitor's current brightness.
* @param pdwMaximumBrightness Receives the monitor's maximum brightness.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL GetMonitorBrightness(HANDLE hMonitor, DWORDByReference pdwMinimumBrightness,
DWORDByReference pdwCurrentBrightness, DWORDByReference pdwMaximumBrightness);
/**
* Retrieves a monitor's minimum, maximum, and current contrast settings.
* @param hMonitor Handle to a physical monitor.
* @param pdwMinimumContrast Receives the monitor's minimum contrast.
* @param pdwCurrentContrast Receives the monitor's current contrast.
* @param pdwMaximumContrast Receives the monitor's maximum contrast.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL GetMonitorContrast(HANDLE hMonitor, DWORDByReference pdwMinimumContrast, DWORDByReference pdwCurrentContrast,
DWORDByReference pdwMaximumContrast);
/**
* Retrieves a monitor's current color temperature.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_COLOR_TEMPERATURE flag.
* This function takes between 0 and 80 milliseconds to return.
* @param hMonitor Handle to a physical monitor.
* @param pctCurrentColorTemperature Receives the monitor's current color temperature.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL GetMonitorColorTemperature(HANDLE hMonitor, MC_COLOR_TEMPERATURE.ByReference pctCurrentColorTemperature);
/**
* Retrieves a monitor's red, green, or blue drive value.
* <br/><br/>
* Drive settings are generally used to adjust the monitor's white point. Drive and black level are different
* names for the same monitor setting. If this function is supported, the GetMonitorCapabilities function returns
* the MC_CAPS_RED_GREEN_BLUE_DRIVE flag.
* @param hMonitor Handle to a physical monitor.
* @param dtDriveType A member of the MC_DRIVE_TYPE enumeration, specifying whether to retrieve the red, green, or blue drive value.
* @param pdwMinimumDrive Receives the minimum red, green, or blue drive value.
* @param pdwCurrentDrive Receives the current red, green, or blue drive value.
* @param pdwMaximumDrive Receives the maximum red, green, or blue drive value.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL GetMonitorRedGreenOrBlueDrive(HANDLE hMonitor, MC_DRIVE_TYPE dtDriveType, DWORDByReference pdwMinimumDrive,
DWORDByReference pdwCurrentDrive, DWORDByReference pdwMaximumDrive);
/**
* Retrieves a monitor's red, green, or blue gain value.
* <br/><br/>
* Gain settings are generally used to adjust the monitor's white point. If this function is supported, the
* GetMonitorCapabilities function returns the MC_CAPS_RED_GREEN_BLUE_GAIN flag. This function takes about 40 milliseconds to return.
* The gain settings are continuous monitor settings.
* @param hMonitor Handle to a physical monitor.
* @param gtGainType A member of the MC_GAIN_TYPE enumeration, specifying whether to retrieve the red, green, or blue gain value.
* @param pdwMinimumGain Receives the minimum red, green, or blue gain value.
* @param pdwCurrentGain Receives the current red, green, or blue gain value.
* @param pdwMaximumGain Receives the maximum red, green, or blue gain value.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL GetMonitorRedGreenOrBlueGain(HANDLE hMonitor, MC_GAIN_TYPE gtGainType, DWORDByReference pdwMinimumGain,
DWORDByReference pdwCurrentGain, DWORDByReference pdwMaximumGain);
/**
* Sets a monitor's brightness value.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_BRIGHTNESS flag.
* This function takes about 50 milliseconds to return.
* The brightness setting is a continuous monitor setting.
* @param hMonitor Handle to a physical monitor.
* @param dwNewBrightness Brightness value. To get the monitor's minimum and maximum brightness values, call GetMonitorBrightness.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL SetMonitorBrightness(HANDLE hMonitor, int dwNewBrightness);
/**
* Sets a monitor's contrast value.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_CONTRAST flag.
* This function takes about 50 milliseconds to return. The brightness setting is a continuous monitor setting.
* @param hMonitor Handle to a physical monitor.
* @param dwNewContrast Contrast value. To get the monitor's minimum and maximum contrast values, call GetMonitorContrast.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL SetMonitorContrast(HANDLE hMonitor, int dwNewContrast);
/**
* Sets a monitor's color temperature.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_COLOR_TEMPERATURE flag.
* The GetMonitorCapabilities function also returns the range of color temperatures that the monitor supports.
* The ctCurrentColorTemperature parameter must correspond to one of these values. Changing the color temperature
* changes the monitor's white point. It can also change the current drive and gain settings. To get the new drive
* and gain settings, call GetMonitorRedGreenOrBlueDrive and GetMonitorRedGreenOrBlueGain, respectively.
* This function takes from 50 to 90 milliseconds to return.
* @param hMonitor Handle to a physical monitor.
* @param ctCurrentColorTemperature Color temperature, specified as a member of the MC_COLOR_TEMPERATURE enumeration.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL SetMonitorColorTemperature(HANDLE hMonitor, MC_COLOR_TEMPERATURE ctCurrentColorTemperature);
/**
* Sets a monitor's red, green, or blue drive value.
* <br/><br/>
* Drive settings are generally used to adjust the
* monitor's white point. Drive and black level are different names for the same monitor setting. If this function
* is supported, the GetMonitorCapabilities function returns the MC_CAPS_RED_GREEN_BLUE_DRIVE flag. This function
* takes about 50 milliseconds to return. Changing the drive settings can change the color temperature. To get the
* new color temperature, call GetMonitorColorTemperature. The drive settings are continuous monitor settings
* @param hMonitor Handle to a physical monitor.
* @param dtDriveType A member of the MC_DRIVE_TYPE enumeration, specifying whether to set the red, green, or blue
* drive value.
* @param dwNewDrive Red, green, or blue drive value. To get the monitor's minimum and maximum drive values, call
* GetMonitorRedGreenOrBlueDrive.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL SetMonitorRedGreenOrBlueDrive(HANDLE hMonitor, MC_DRIVE_TYPE dtDriveType, int dwNewDrive);
/**
* Sets a monitor's red, green, or blue gain value.
* <br/><br/>
* Gain settings are generally used to adjust the
* monitor's white point. If this function is supported, the GetMonitorCapabilities function returns the
* MC_CAPS_RED_GREEN_BLUE_GAIN flag. This function takes about 50 milliseconds to return. Changing the gain settings
* can change the color temperature. To get the new color temperature, call GetMonitorColorTemperature. The gain
* settings are continuous monitor settings.
* @param hMonitor Handle to a physical monitor.
* @param gtGainType A member of the MC_GAIN_TYPE enumeration, specifying whether to set the red, green, or blue
* gain.
* @param dwNewGain Red, green, or blue gain value. To get the monitor's minimum and maximum gain values, call
* GetMonitorRedGreenOrBlueGain.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL SetMonitorRedGreenOrBlueGain(HANDLE hMonitor, MC_GAIN_TYPE gtGainType, int dwNewGain);
/**
* Degausses a monitor.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DEGAUSS flag. Degaussing
* is supported only by cathode ray tube (CRT) monitors. This function takes about 50 milliseconds to return. This
* function should not be called frequently, because calling it frequently will not noticeably improve the monitor's
* image quality or color fidelity.
* @param hMonitor Handle to a physical monitor.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL DegaussMonitor(HANDLE hMonitor);
/******************************************************************************
* Monitor image size and position calibration functions
******************************************************************************/
/**
* Retrieves a monitor's minimum, maximum, and current width or height.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_AREA_SIZE flag.
* This function takes about 40 milliseconds to return. The width and height settings are continuous monitor settings.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param stSizeType A member of the MC_SIZE_TYPE enumeration, specifying whether to retrieve the width or the height.
* @param pdwMinimumWidthOrHeight Receives the minimum width or height.
* @param pdwCurrentWidthOrHeight Receives the current width or height.
* @param pdwMaximumWidthOrHeight Receives the maximum width or height.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL GetMonitorDisplayAreaSize(HANDLE hMonitor, MC_SIZE_TYPE stSizeType, DWORDByReference pdwMinimumWidthOrHeight,
DWORDByReference pdwCurrentWidthOrHeight, DWORDByReference pdwMaximumWidthOrHeight);
/**
* Retrieves a monitor's minimum, maximum, and current horizontal or vertical position.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_AREA_POSITION flag.
* This function takes about 40 milliseconds to return. The horizontal and vertical position are continuous monitor settings.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param ptPositionType A member of the MC_POSITION_TYPE enumeration, specifying whether to retrieve the horizontal position or the vertical position.
* @param pdwMinimumPosition Receives the minimum horizontal or vertical position.
* @param pdwCurrentPosition Receives the current horizontal or vertical position.
* @param pdwMaximumPosition Receives the maximum horizontal or vertical position.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL GetMonitorDisplayAreaPosition(HANDLE hMonitor, MC_POSITION_TYPE ptPositionType,
DWORDByReference pdwMinimumPosition, DWORDByReference pdwCurrentPosition,
DWORDByReference pdwMaximumPosition);
/**
* Sets the width or height of a monitor's display area.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_AREA_SIZE flag.
* This function takes about 50 milliseconds to return. The width and height settings are continuous monitor settings.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param stSizeType A member of the MC_SIZE_TYPE enumeration, specifying whether to set the width or the height.
* @param dwNewDisplayAreaWidthOrHeight Display area width or height. To get the minimum and maximum width and height,
* call GetMonitorDisplayAreaSize.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL SetMonitorDisplayAreaSize(HANDLE hMonitor, MC_SIZE_TYPE stSizeType, int dwNewDisplayAreaWidthOrHeight);
/**
* Sets the horizontal or vertical position of a monitor's display area.
* <br/><br/>
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_AREA_POSITION flag.
* This function takes about 50 milliseconds to return. The horizontal and vertical position are continuous monitor settings.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param ptPositionType A member of the MC_POSITION_TYPE enumeration, specifying whether to set the horizontal position or the vertical position.
* @param dwNewPosition Horizontal or vertical position. To get the minimum and maximum position, call GetMonitorDisplayAreaPosition.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL SetMonitorDisplayAreaPosition(HANDLE hMonitor, MC_POSITION_TYPE ptPositionType, int dwNewPosition);
/******************************************************************************
* Restore to defaults functions
******************************************************************************/
/**
* Restores a monitor's color settings to their factory defaults. This function potentially changes the current
* value of the monitor's brightness, contrast, color temperature, drive, and gain. The current value of each
* setting is changed to its factory default. The default settings depend on the manufacturer. This function can
* also change the range of supported values for each of these settings. The function does not enable any monitor
* settings that were disabled. If this function is supported, the GetMonitorCapabilities function returns the
* MC_CAPS_RESTORE_FACTORY_COLOR_DEFAULTS flag. This function takes about 5 seconds to return. This function might
* reset monitor settings that are not accessible through the high-level monitor configuration functions. Whether
* this occurs depends on the specific model of monitor. The following settings are not affected by this function:
* <li>Display area size</li>
* <li>Display area position</li>
* <li>Capabilities flags</li>
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL RestoreMonitorFactoryColorDefaults(HANDLE hMonitor);
/**
* Restores a monitor's settings to their factory defaults. This function restores all of the settings that are
* supported by the high-level monitor configuration functions. It might also restore settings that are available
* only through the low-level functions and are not supported by the high-level functions. The current value of each
* setting is changed to its factory default. The exact settings that change, and the default values of those
* settings, depend on the manufacturer. This function can also change the range of supported values for some
* settings. If this function is supported, the GetMonitorCapabilities function returns the
* MC_CAPS_RESTORE_FACTORY_DEFAULTS flag. This function takes about 5 seconds to return. If GetMonitorCapabilities
* returns the MC_RESTORE_FACTORY_DEFAULTS_ENABLES_MONITOR_SETTINGS flag, this function also enables all of the
* monitor settings that are supported by the high-level functions. It is sometimes possible for an application to
* disable certain settings by calling the low-level functions. It is also possible for the user to disable certain
* settings by adjusting settings on the monitor's physical control panel. If that happens, the setting can only be
* re-enabled through the control panel or by calling RestoreMonitorFactoryDefaults. It is not possible to disable
* any settings by using the high-level functions.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL RestoreMonitorFactoryDefaults(HANDLE hMonitor);
// LowLevelMonitorConfigurationAPI.h
/**
* Retrieves the current value, maximum value, and code type of a Virtual Control Panel (VCP) code for a monitor.
* This function corresponds to the "Get VCP Feature & VCP Feature Reply" command from the Display Data
* Channel Command Interface (DDC/CI) standard. Vendor-specific VCP codes can be used with this function.
* This function takes about 40 milliseconds to return.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param bVCPCode VCP code to query. The VCP codes are Include the VESA Monitor Control Command Set (MCCS)
* standard, versions 1.0 and 2.0. This parameter must specify a continuous or non-continuous VCP, or a
* vendor-specific code. It should not be a table control code.
* @param pvct Receives the VCP code type, as a member of the MC_VCP_CODE_TYPE enumeration. This parameter can be NULL.
* @param pdwCurrentValue Receives the current value of the VCP code. This parameter can be NULL.
* @param pdwMaximumValue If bVCPCode specifies a continuous VCP code, this parameter receives the maximum value of
* the VCP code. If bVCPCode specifies a non-continuous VCP code, the value received in this parameter
* is undefined. This parameter can be NULL.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL GetVCPFeatureAndVCPFeatureReply(HANDLE hMonitor, BYTE bVCPCode, MC_VCP_CODE_TYPE.ByReference pvct,
DWORDByReference pdwCurrentValue, DWORDByReference pdwMaximumValue);
/**
* Sets the value of a Virtual Control Panel (VCP) code for a monitor. This function corresponds to the
* "Set VCP Feature" command from the Display Data Channel Command Interface (DDC/CI) standard. This function takes
* about 50 milliseconds to return.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param bVCPCode VCP code to set. The VCP codes are defined in the VESA Monitor Control Command Set (MCCS)
* standard, version 1.0 and 2.0. This parameter must specify a continuous or non-continuous VCP, or a
* vendor-specific code. It should not be a table control code.
* @param dwNewValue Value of the VCP code.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL SetVCPFeature(HANDLE hMonitor, BYTE bVCPCode, DWORD dwNewValue);
/**
* Saves the current monitor settings to the display's nonvolatile storage. This function corresponds to the
* "Save Current Settings" function from the Display Data Channel Command Interface (DDC/CI) standard. This function
* takes about 200 milliseconds to return. This low-level function is identical to the high-level function
* SaveCurrentMonitorSettings.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL SaveCurrentSettings(HANDLE hMonitor);
/**
* Retrieves the length of a monitor's capabilities string.
* This function usually returns quickly, but sometimes it can take several seconds to complete.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param pdwCapabilitiesStringLengthInCharacters Receives the length of the capabilities string, in characters, including the terminating null character.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL GetCapabilitiesStringLength(HANDLE hMonitor, DWORDByReference pdwCapabilitiesStringLengthInCharacters);
/**
* Retrieves a string describing a monitor's capabilities. This function corresponds to the
* "Capabilities Request & Capabilities Reply" command from the Display Data Channel Command Interface (DDC/CI)
* standard. For more information about the capabilities string, refer to the DDC/CI standard. This function usually
* returns quickly, but sometimes it can take several seconds to complete. You can update a monitor's capabilities
* string by adding an AddReg directive to the monitor's INF file. Add a registry key named "CapabilitiesString" to
* the monitor's driver key. The value of the registry key is the capabilities string. The registry data type is
* REG_SZ.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param pszASCIICapabilitiesString Pointer to a buffer that receives the monitor's capabilities string. The caller
* must allocate this buffer. To get the size of the string, call GetCapabilitiesStringLength. The capabilities
* string is always an ASCII string. The buffer must include space for the terminating null character.
* @param dwCapabilitiesStringLengthInCharacters Size of pszASCIICapabilitiesString in characters, including the
* terminating null character.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL CapabilitiesRequestAndCapabilitiesReply(HANDLE hMonitor, LPSTR pszASCIICapabilitiesString,
DWORD dwCapabilitiesStringLengthInCharacters);
/**
* Retrieves a monitor's horizontal and vertical synchronization frequencies.
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
* @param pmtrMonitorTimingReport Pointer to an MC_TIMING_REPORT structure that receives the timing information.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
*/
BOOL GetTimingReport(HANDLE hMonitor, MC_TIMING_REPORT pmtrMonitorTimingReport);
// PhysicalMonitorEnumerationAPI.h
/******************************************************************************
* Physical Monitor Enumeration Functions
******************************************************************************/
/**
* Retrieves the number of physical monitors associated with an HMONITOR monitor handle. Call this function before
* calling GetPhysicalMonitorsFromHMONITOR.
* @param hMonitor A monitor handle. Monitor handles are returned by several Multiple Display Monitor functions,
* including EnumDisplayMonitors and MonitorFromWindow, which are part of the graphics device interface (GDI).
* @param pdwNumberOfPhysicalMonitors Receives the number of physical monitors associated with the monitor handle.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL GetNumberOfPhysicalMonitorsFromHMONITOR(HMONITOR hMonitor, DWORDByReference pdwNumberOfPhysicalMonitors);
// HRESULT GetNumberOfPhysicalMonitorsFromIDirect3DDevice9
// (
// IDirect3DDevice9* pDirect3DDevice9,
// DWORDByReference pdwNumberOfPhysicalMonitors
// );
/**
* Retrieves the physical monitors associated with an HMONITOR monitor handle. A single HMONITOR handle can be
* associated with more than one physical monitor. This function returns a handle and a text description for each
* physical monitor. When you are done using the monitor handles, close them by passing the pPhysicalMonitorArray
* array to the DestroyPhysicalMonitors function.
* @param hMonitor A monitor handle. Monitor handles are returned by several Multiple Display Monitor functions,
* including EnumDisplayMonitors and MonitorFromWindow, which are part of the graphics device interface (GDI).
* @param dwPhysicalMonitorArraySize Number of elements in pPhysicalMonitorArray. To get the required size of the
* array, call GetNumberOfPhysicalMonitorsFromHMONITOR.
* @param pPhysicalMonitorArray Pointer to an array of PHYSICAL_MONITOR structures. The caller must allocate the
* array.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL GetPhysicalMonitorsFromHMONITOR(HMONITOR hMonitor, int dwPhysicalMonitorArraySize,
PHYSICAL_MONITOR[] pPhysicalMonitorArray);
// HRESULT GetPhysicalMonitorsFromIDirect3DDevice9
// (
// __in IDirect3DDevice9* pDirect3DDevice9,
// __in DWORD dwPhysicalMonitorArraySize,
// __out_ecount(dwPhysicalMonitorArraySize) LPPHYSICAL_MONITOR pPhysicalMonitorArray
// );
/**
* Closes a handle to a physical monitor.
* Call this function to close a monitor handle obtained from the GetPhysicalMonitorsFromHMONITOR
* @param hMonitor Handle to a physical monitor.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL DestroyPhysicalMonitor(HANDLE hMonitor);
/**
* Closes an array of physical monitor handles.
* Call this function to close an array of monitor handles obtained from the GetPhysicalMonitorsFromHMONITOR
* @param dwPhysicalMonitorArraySize Number of elements in the pPhysicalMonitorArray array.
* @param pPhysicalMonitorArray Pointer to an array of PHYSICAL_MONITOR structures.
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
*/
BOOL DestroyPhysicalMonitors(int dwPhysicalMonitorArraySize, PHYSICAL_MONITOR[] pPhysicalMonitorArray);
}
@@ -0,0 +1,30 @@
/*
* Copyright 2014 Martin Steiger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jna.platform.win32;
/**
* An interface for enum that can be combined to a
* set based on an integer value
* @author Martin Steiger
*/
public interface FlagEnum
{
/**
* @return the flag value - usually 2^n
*/
int getFlag();
}
@@ -19,6 +19,7 @@ import com.sun.jna.platform.win32.WinDef.HDC;
import com.sun.jna.platform.win32.WinDef.HRGN;
import com.sun.jna.platform.win32.WinGDI.BITMAPINFO;
import com.sun.jna.platform.win32.WinGDI.BITMAPINFOHEADER;
import com.sun.jna.platform.win32.WinGDI.PIXELFORMATDESCRIPTOR;
import com.sun.jna.platform.win32.WinGDI.RGNDATA;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.ptr.PointerByReference;
@@ -123,7 +124,7 @@ public interface GDI32 extends StdCallLibrary {
* If the function fails, the return value is zero.
* To get extended error information, call GetLastError.
*/
HRGN CreatePolyPolygonRgn(WinUser.POINT[] lppt, int[] lpPolyCounts,
HRGN CreatePolyPolygonRgn(WinDef.POINT[] lppt, int[] lpPolyCounts,
int nCount, int fnPolyFillMode);
/**
@@ -313,4 +314,33 @@ public interface GDI32 extends StdCallLibrary {
* BITMAPINFO} structure.
*/
int GetDIBits(HDC hdc, HBITMAP hbmp, int uStartScan, int cScanLines, Pointer lpvBits, BITMAPINFO lpbi, int uUsage);
/**
* The ChoosePixelFormat function attempts to match an appropriate pixel format supported
* by a device context to a given pixel format specification.
*
* @param hdc
* Specifies the device context that the function examines to determine the best
* match for the pixel format descriptor pointed to by ppfd.
* @param ppfd
* Pointer to a PIXELFORMATDESCRIPTOR structure that specifies the requested pixel format.
* @return If the function succeeds, the return value is a pixel format index (one-based) that
* is the closest match to the given pixel format descriptor.
*/
public int ChoosePixelFormat(HDC hdc, PIXELFORMATDESCRIPTOR.ByReference ppfd);
/**
* The SetPixelFormat function sets the pixel format of the specified device context to the
* format specified by the iPixelFormat index.
*
* @param hdc
* Specifies the device context whose pixel format the function attempts to set.
* @param iPixelFormat
* Index that identifies the pixel format to set. The various pixel formats supported
* by a device context are identified by one-based indexes.
* @param ppfd
* Pointer to a PIXELFORMATDESCRIPTOR structure that contains the logical pixel format specification.
* @return true if successful
*/
public boolean SetPixelFormat(HDC hdc, int iPixelFormat, PIXELFORMATDESCRIPTOR.ByReference ppfd);
}
@@ -0,0 +1,25 @@
/* Copyright (c) 2011 Timothy Wall, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32;
import com.sun.jna.win32.StdCallLibrary;
/**
* Definitions for WinOpenGL
*/
public interface GL extends StdCallLibrary {
public final int GL_VENDOR = 0x1F00;
public final int GL_RENDERER = 0x1F01;
public final int GL_VERSION = 0x1F02;
public final int GL_EXTENSIONS = 0x1F03;
}
@@ -7,7 +7,7 @@
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32;
@@ -19,457 +19,494 @@ import java.util.List;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
// TODO: Auto-generated Javadoc
/**
* Ported from Guid.h. Microsoft Windows SDK 6.0A.
*
*
* @author dblock[at]dblock.org
*/
public interface Guid {
public final static IID IID_NULL = new IID();
/**
* The Class GUID.
*/
public static class GUID extends Structure {
/**
* The Class ByReference.
*/
public static class ByReference extends GUID implements
Structure.ByReference {
/**
* Instantiates a new by reference.
*/
public ByReference() {
}
/**
* Instantiates a new by reference.
*
* @param guid
* the guid
*/
public ByReference(GUID guid) {
super(guid.getPointer());
Data1 = guid.Data1;
Data2 = guid.Data2;
Data3 = guid.Data3;
Data4 = guid.Data4;
}
/**
* Instantiates a new by reference.
*
* @param memory
* the memory
*/
public ByReference(Pointer memory) {
super(memory);
}
}
/** The Data1. */
public int Data1;
/** The Data2. */
public short Data2;
/** The Data3. */
public short Data3;
/** The Data4. */
public byte[] Data4 = new byte[8];
/**
* Instantiates a new guid.
*/
public GUID() {
}
/**
* Instantiates a new guid.
*
* @param guid
* the guid
*/
public GUID(GUID guid) {
this.Data1 = guid.Data1;
this.Data2 = guid.Data2;
this.Data3 = guid.Data3;
this.Data4 = guid.Data4;
this.writeFieldsToMemory();
}
/**
* Instantiates a new guid.
*
* @param guid
* the guid
*/
public GUID(String guid) {
this(fromString(guid));
}
/**
* Instantiates a new guid.
*
* @param data
* the data
*/
public GUID(byte[] data) {
this(fromBinary(data));
}
/**
* Instantiates a new guid.
*
* @param memory
* the memory
*/
public GUID(Pointer memory) {
super(memory);
read();
}
/**
* From binary.
*
* @param data
* the data
* @return the guid
*/
public static GUID fromBinary(byte[] data) {
if (data.length != 16) {
throw new IllegalArgumentException("Invalid data length: "
+ data.length);
}
GUID newGuid = new GUID();
long data1Temp = data[0] & 0xff;
data1Temp <<= 8;
data1Temp |= data[1] & 0xff;
data1Temp <<= 8;
data1Temp |= data[2] & 0xff;
data1Temp <<= 8;
data1Temp |= data[3] & 0xff;
newGuid.Data1 = (int) data1Temp;
int data2Temp = data[4] & 0xff;
data2Temp <<= 8;
data2Temp |= data[5] & 0xff;
newGuid.Data2 = (short) data2Temp;
int data3Temp = data[6] & 0xff;
data3Temp <<= 8;
data3Temp |= data[7] & 0xff;
newGuid.Data3 = (short) data3Temp;
newGuid.Data4[0] = data[8];
newGuid.Data4[1] = data[9];
newGuid.Data4[2] = data[10];
newGuid.Data4[3] = data[11];
newGuid.Data4[4] = data[12];
newGuid.Data4[5] = data[13];
newGuid.Data4[6] = data[14];
newGuid.Data4[7] = data[15];
newGuid.writeFieldsToMemory();
return newGuid;
}
/**
* From string.
*
* @param guid
* the guid
* @return the guid
*/
public static GUID fromString(String guid) {
int y = 0;
char[] _cnewguid = new char[32];
char[] _cguid = guid.toCharArray();
byte[] bdata = new byte[16];
GUID newGuid = new GUID();
// we not accept a string longer than 38 chars
if (guid.length() > 38) {
throw new IllegalArgumentException("Invalid guid length: "
+ guid.length());
}
// remove '{', '}' and '-' from guid string
for (int i = 0; i < _cguid.length; i++) {
if ((_cguid[i] != '{') && (_cguid[i] != '-')
&& (_cguid[i] != '}'))
_cnewguid[y++] = _cguid[i];
}
// convert char to byte
for (int i = 0; i < 32; i += 2) {
bdata[i / 2] = (byte) ((Character.digit(_cnewguid[i], 16) << 4)
+ Character.digit(_cnewguid[i + 1], 16) & 0xff);
}
if (bdata.length != 16) {
throw new IllegalArgumentException("Invalid data length: "
+ bdata.length);
}
long data1Temp = bdata[0] & 0xff;
data1Temp <<= 8;
data1Temp |= bdata[1] & 0xff;
data1Temp <<= 8;
data1Temp |= bdata[2] & 0xff;
data1Temp <<= 8;
data1Temp |= bdata[3] & 0xff;
newGuid.Data1 = (int) data1Temp;
int data2Temp = bdata[4] & 0xff;
data2Temp <<= 8;
data2Temp |= bdata[5] & 0xff;
newGuid.Data2 = (short) data2Temp;
int data3Temp = bdata[6] & 0xff;
data3Temp <<= 8;
data3Temp |= bdata[7] & 0xff;
newGuid.Data3 = (short) data3Temp;
newGuid.Data4[0] = bdata[8];
newGuid.Data4[1] = bdata[9];
newGuid.Data4[2] = bdata[10];
newGuid.Data4[3] = bdata[11];
newGuid.Data4[4] = bdata[12];
newGuid.Data4[5] = bdata[13];
newGuid.Data4[6] = bdata[14];
newGuid.Data4[7] = bdata[15];
newGuid.writeFieldsToMemory();
return newGuid;
}
/**
* Generates a new guid. Code taken from the standard jdk
* implementation (see UUID class).
*
* @return the guid
*/
public static GUID newGuid() {
SecureRandom ng = new SecureRandom();
byte[] randomBytes = new byte[16];
ng.nextBytes(randomBytes);
randomBytes[6] &= 0x0f;
randomBytes[6] |= 0x40;
randomBytes[8] &= 0x3f;
randomBytes[8] |= 0x80;
return new GUID(randomBytes);
}
/**
* To byte array.
*
* @return the byte[]
*/
public byte[] toByteArray() {
byte[] guid = new byte[16];
byte[] bytes1 = new byte[4];
bytes1[0] = (byte) (Data1 >> 24);
bytes1[1] = (byte) (Data1 >> 16);
bytes1[2] = (byte) (Data1 >> 8);
bytes1[3] = (byte) (Data1 >> 0);
byte[] bytes2 = new byte[4];
bytes2[0] = (byte) (Data2 >> 24);
bytes2[1] = (byte) (Data2 >> 16);
bytes2[2] = (byte) (Data2 >> 8);
bytes2[3] = (byte) (Data2 >> 0);
byte[] bytes3 = new byte[4];
bytes3[0] = (byte) (Data3 >> 24);
bytes3[1] = (byte) (Data3 >> 16);
bytes3[2] = (byte) (Data3 >> 8);
bytes3[3] = (byte) (Data3 >> 0);
System.arraycopy(bytes1, 0, guid, 0, 4);
System.arraycopy(bytes2, 2, guid, 4, 2);
System.arraycopy(bytes3, 2, guid, 6, 2);
System.arraycopy(Data4, 0, guid, 8, 8);
return guid;
}
/**
* The value of this Guid, formatted as follows:
* xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
*
* @return the string
*/
public String toGuidString() {
final String HEXES = "0123456789ABCDEF";
byte[] bGuid = toByteArray();
final StringBuilder hexStr = new StringBuilder(2 * bGuid.length);
hexStr.append("{");
for (int i = 0; i < bGuid.length; i++) {
char ch1 = HEXES.charAt((bGuid[i] & 0xF0) >> 4);
char ch2 = HEXES.charAt(bGuid[i] & 0x0F);
hexStr.append(ch1).append(ch2);
if ((i == 3) || (i == 5) || (i == 7) || (i == 9))
hexStr.append("-");
}
hexStr.append("}");
return hexStr.toString();
}
/**
* Write fields to backing memory.
*/
protected void writeFieldsToMemory() {
this.writeField("Data1");
this.writeField("Data2");
this.writeField("Data3");
this.writeField("Data4");
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.Structure#getFieldOrder()
*/
protected List getFieldOrder() {
return Arrays.asList(new String[] { "Data1", "Data2", "Data3",
"Data4" });
}
}
/**
* The Class CLSID.
*/
public static class CLSID extends GUID {
/**
* The Class ByReference.
*/
public static class ByReference extends GUID {
/**
* Instantiates a new by reference.
*/
public ByReference() {
}
/**
* Instantiates a new by reference.
*
* @param guid
* the guid
*/
public ByReference(GUID guid) {
super(guid);
}
/**
* Instantiates a new by reference.
*
* @param memory
* the memory
*/
public ByReference(Pointer memory) {
}
}
/**
* Instantiates a new clsid.
*/
public CLSID() {
}
}
/**
* The Class REFIID.
*/
public class REFIID extends IID {
/**
* Instantiates a new refiid.
*/
public REFIID() {
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new refiid.
*
* @param memory
* the memory
*/
public REFIID(Pointer memory) {
super(memory);
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new refiid.
*
* @param data
* the data
*/
public REFIID(byte[] data) {
super(data);
// TODO Auto-generated constructor stub
}
}
/**
* The Class IID.
*/
public class IID extends GUID {
/**
* Instantiates a new iid.
*/
public IID() {
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new iid.
*
* @param memory
* the memory
*/
public IID(Pointer memory) {
super(memory);
// TODO Auto-generated constructor stub
}
public IID(String iid) {
super(iid);
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new iid.
*
* @param data
* the data
*/
public IID(byte[] data) {
super(data);
// TODO Auto-generated constructor stub
}
}
}
/** The Constant IID_NULL. */
public final static IID IID_NULL = new IID();
/**
* The Class GUID.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public static class GUID extends Structure {
/**
* The Class ByReference.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public static class ByReference extends GUID implements
Structure.ByReference {
/**
* Instantiates a new by reference.
*/
public ByReference() {
}
/**
* Instantiates a new by reference.
*
* @param guid
* the guid
*/
public ByReference(GUID guid) {
super(guid.getPointer());
Data1 = guid.Data1;
Data2 = guid.Data2;
Data3 = guid.Data3;
Data4 = guid.Data4;
}
/**
* Instantiates a new by reference.
*
* @param memory
* the memory
*/
public ByReference(Pointer memory) {
super(memory);
}
}
/** The Data1. */
public int Data1;
/** The Data2. */
public short Data2;
/** The Data3. */
public short Data3;
/** The Data4. */
public byte[] Data4 = new byte[8];
/**
* Instantiates a new guid.
*/
public GUID() {
}
/**
* Instantiates a new guid.
*
* @param guid
* the guid
*/
public GUID(GUID guid) {
this.Data1 = guid.Data1;
this.Data2 = guid.Data2;
this.Data3 = guid.Data3;
this.Data4 = guid.Data4;
this.writeFieldsToMemory();
}
/**
* Instantiates a new guid.
*
* @param guid
* the guid
*/
public GUID(String guid) {
this(fromString(guid));
}
/**
* Instantiates a new guid.
*
* @param data
* the data
*/
public GUID(byte[] data) {
this(fromBinary(data));
}
/**
* Instantiates a new guid.
*
* @param memory
* the memory
*/
public GUID(Pointer memory) {
super(memory);
read();
}
/**
* From binary.
*
* @param data
* the data
* @return the guid
*/
public static GUID fromBinary(byte[] data) {
if (data.length != 16) {
throw new IllegalArgumentException("Invalid data length: "
+ data.length);
}
GUID newGuid = new GUID();
long data1Temp = data[0] & 0xff;
data1Temp <<= 8;
data1Temp |= data[1] & 0xff;
data1Temp <<= 8;
data1Temp |= data[2] & 0xff;
data1Temp <<= 8;
data1Temp |= data[3] & 0xff;
newGuid.Data1 = (int) data1Temp;
int data2Temp = data[4] & 0xff;
data2Temp <<= 8;
data2Temp |= data[5] & 0xff;
newGuid.Data2 = (short) data2Temp;
int data3Temp = data[6] & 0xff;
data3Temp <<= 8;
data3Temp |= data[7] & 0xff;
newGuid.Data3 = (short) data3Temp;
newGuid.Data4[0] = data[8];
newGuid.Data4[1] = data[9];
newGuid.Data4[2] = data[10];
newGuid.Data4[3] = data[11];
newGuid.Data4[4] = data[12];
newGuid.Data4[5] = data[13];
newGuid.Data4[6] = data[14];
newGuid.Data4[7] = data[15];
newGuid.writeFieldsToMemory();
return newGuid;
}
/**
* From string.
*
* @param guid
* the guid
* @return the guid
*/
public static GUID fromString(String guid) {
int y = 0;
char[] _cnewguid = new char[32];
char[] _cguid = guid.toCharArray();
byte[] bdata = new byte[16];
GUID newGuid = new GUID();
// we not accept a string longer than 38 chars
if (guid.length() > 38) {
throw new IllegalArgumentException("Invalid guid length: "
+ guid.length());
}
// remove '{', '}' and '-' from guid string
for (int i = 0; i < _cguid.length; i++) {
if ((_cguid[i] != '{') && (_cguid[i] != '-')
&& (_cguid[i] != '}'))
_cnewguid[y++] = _cguid[i];
}
// convert char to byte
for (int i = 0; i < 32; i += 2) {
bdata[i / 2] = (byte) ((Character.digit(_cnewguid[i], 16) << 4)
+ Character.digit(_cnewguid[i + 1], 16) & 0xff);
}
if (bdata.length != 16) {
throw new IllegalArgumentException("Invalid data length: "
+ bdata.length);
}
long data1Temp = bdata[0] & 0xff;
data1Temp <<= 8;
data1Temp |= bdata[1] & 0xff;
data1Temp <<= 8;
data1Temp |= bdata[2] & 0xff;
data1Temp <<= 8;
data1Temp |= bdata[3] & 0xff;
newGuid.Data1 = (int) data1Temp;
int data2Temp = bdata[4] & 0xff;
data2Temp <<= 8;
data2Temp |= bdata[5] & 0xff;
newGuid.Data2 = (short) data2Temp;
int data3Temp = bdata[6] & 0xff;
data3Temp <<= 8;
data3Temp |= bdata[7] & 0xff;
newGuid.Data3 = (short) data3Temp;
newGuid.Data4[0] = bdata[8];
newGuid.Data4[1] = bdata[9];
newGuid.Data4[2] = bdata[10];
newGuid.Data4[3] = bdata[11];
newGuid.Data4[4] = bdata[12];
newGuid.Data4[5] = bdata[13];
newGuid.Data4[6] = bdata[14];
newGuid.Data4[7] = bdata[15];
newGuid.writeFieldsToMemory();
return newGuid;
}
/**
* Generates a new guid. Code taken from the standard jdk implementation
* (see UUID class).
*
* @return the guid
*/
public static GUID newGuid() {
SecureRandom ng = new SecureRandom();
byte[] randomBytes = new byte[16];
ng.nextBytes(randomBytes);
randomBytes[6] &= 0x0f;
randomBytes[6] |= 0x40;
randomBytes[8] &= 0x3f;
randomBytes[8] |= 0x80;
return new GUID(randomBytes);
}
/**
* To byte array.
*
* @return the byte[]
*/
public byte[] toByteArray() {
byte[] guid = new byte[16];
byte[] bytes1 = new byte[4];
bytes1[0] = (byte) (Data1 >> 24);
bytes1[1] = (byte) (Data1 >> 16);
bytes1[2] = (byte) (Data1 >> 8);
bytes1[3] = (byte) (Data1 >> 0);
byte[] bytes2 = new byte[4];
bytes2[0] = (byte) (Data2 >> 24);
bytes2[1] = (byte) (Data2 >> 16);
bytes2[2] = (byte) (Data2 >> 8);
bytes2[3] = (byte) (Data2 >> 0);
byte[] bytes3 = new byte[4];
bytes3[0] = (byte) (Data3 >> 24);
bytes3[1] = (byte) (Data3 >> 16);
bytes3[2] = (byte) (Data3 >> 8);
bytes3[3] = (byte) (Data3 >> 0);
System.arraycopy(bytes1, 0, guid, 0, 4);
System.arraycopy(bytes2, 2, guid, 4, 2);
System.arraycopy(bytes3, 2, guid, 6, 2);
System.arraycopy(Data4, 0, guid, 8, 8);
return guid;
}
/**
* The value of this Guid, formatted as follows:
* xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
*
* @return the string
*/
public String toGuidString() {
final String HEXES = "0123456789ABCDEF";
byte[] bGuid = toByteArray();
final StringBuilder hexStr = new StringBuilder(2 * bGuid.length);
hexStr.append("{");
for (int i = 0; i < bGuid.length; i++) {
char ch1 = HEXES.charAt((bGuid[i] & 0xF0) >> 4);
char ch2 = HEXES.charAt(bGuid[i] & 0x0F);
hexStr.append(ch1).append(ch2);
if ((i == 3) || (i == 5) || (i == 7) || (i == 9))
hexStr.append("-");
}
hexStr.append("}");
return hexStr.toString();
}
/**
* Write fields to backing memory.
*/
protected void writeFieldsToMemory() {
this.writeField("Data1");
this.writeField("Data2");
this.writeField("Data3");
this.writeField("Data4");
}
/*
* (non-Javadoc)
*
* @see com.sun.jna.Structure#getFieldOrder()
*/
protected List getFieldOrder() {
return Arrays.asList(new String[] { "Data1", "Data2", "Data3",
"Data4" });
}
}
/**
* The Class CLSID.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public static class CLSID extends GUID {
/**
* The Class ByReference.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public static class ByReference extends GUID {
/**
* Instantiates a new by reference.
*/
public ByReference() {
}
/**
* Instantiates a new by reference.
*
* @param guid
* the guid
*/
public ByReference(GUID guid) {
super(guid);
}
/**
* Instantiates a new by reference.
*
* @param memory
* the memory
*/
public ByReference(Pointer memory) {
}
}
/**
* Instantiates a new clsid.
*/
public CLSID() {
}
/**
* Instantiates a new clsid.
*
* @param guid the guid
*/
public CLSID(String guid) {
super(guid);
}
/**
* Instantiates a new clsid.
*
* @param guid the guid
*/
public CLSID(GUID guid) {
super(guid);
}
}
/**
* The Class REFIID.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class REFIID extends IID {
/**
* Instantiates a new refiid.
*/
public REFIID() {
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new refiid.
*
* @param memory
* the memory
*/
public REFIID(Pointer memory) {
super(memory);
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new refiid.
*
* @param data
* the data
*/
public REFIID(byte[] data) {
super(data);
// TODO Auto-generated constructor stub
}
}
/**
* The Class IID.
*
* @author Tobias Wolf, wolf.tobias@gmx.net
*/
public class IID extends GUID {
/**
* Instantiates a new iid.
*/
public IID() {
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new iid.
*
* @param memory
* the memory
*/
public IID(Pointer memory) {
super(memory);
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new iid.
*
* @param iid the iid
*/
public IID(String iid) {
super(iid);
// TODO Auto-generated constructor stub
}
/**
* Instantiates a new iid.
*
* @param data
* the data
*/
public IID(byte[] data) {
super(data);
// TODO Auto-generated constructor stub
}
}
}
@@ -0,0 +1,436 @@
/*
* Copyright 2014 Martin Steiger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jna.platform.win32;
import com.sun.jna.platform.EnumUtils;
/**
* A conversion of HighLevelMonitorConfigurationAPI.h
* @author Martin Steiger
*/
public interface HighLevelMonitorConfigurationAPI
{
/**
* Monitor capabilities - retrieved by GetMonitorCapabilities
*/
enum MC_CAPS implements FlagEnum
{
/**
* The monitor does not support any monitor settings.
*/
MC_CAPS_NONE (0x00000000),
/**
* The monitor supports the GetMonitorTechnologyType function.
*/
MC_CAPS_MONITOR_TECHNOLOGY_TYPE (0x00000001),
/**
* The monitor supports the GetMonitorBrightness and SetMonitorBrightness functions.
*/
MC_CAPS_BRIGHTNESS (0x00000002),
/**
* The monitor supports the GetMonitorContrast and SetMonitorContrast functions.
*/
MC_CAPS_CONTRAST (0x00000004),
/**
* The monitor supports the GetMonitorColorTemperature and SetMonitorColorTemperature functions.
*/
MC_CAPS_COLOR_TEMPERATURE (0x00000008),
/**
* The monitor supports the GetMonitorRedGreenOrBlueGain and SetMonitorRedGreenOrBlueGain functions.
*/
MC_CAPS_RED_GREEN_BLUE_GAIN (0x00000010),
/**
* The monitor supports the GetMonitorRedGreenOrBlueDrive and SetMonitorRedGreenOrBlueDrive functions.
*/
MC_CAPS_RED_GREEN_BLUE_DRIVE (0x00000020),
/**
* The monitor supports the DegaussMonitor function.
*/
MC_CAPS_DEGAUSS (0x00000040),
/**
* The monitor supports the GetMonitorDisplayAreaPosition and SetMonitorDisplayAreaPosition functions.
*/
MC_CAPS_DISPLAY_AREA_POSITION (0x00000080),
/**
* The monitor supports the GetMonitorDisplayAreaSize and SetMonitorDisplayAreaSize functions.
*/
MC_CAPS_DISPLAY_AREA_SIZE (0x00000100),
/**
* The monitor supports the RestoreMonitorFactoryDefaults function.
*/
MC_CAPS_RESTORE_FACTORY_DEFAULTS (0x00000400),
/**
* The monitor supports the RestoreMonitorFactoryColorDefaults function.
*/
MC_CAPS_RESTORE_FACTORY_COLOR_DEFAULTS (0x00000800),
/**
* If this flag is present, calling the RestoreMonitorFactoryDefaults function enables all of
* the monitor settings used by the high-level monitor configuration functions. For more
* information, see the Remarks section in RestoreMonitorFactoryDefaults.
*/
MC_RESTORE_FACTORY_DEFAULTS_ENABLES_MONITOR_SETTINGS (0x00001000);
private int flag;
MC_CAPS(int flag)
{
this.flag = flag;
}
@Override
public int getFlag()
{
return flag;
}
}
/**
* Monitor capabilities - retrieved by GetMonitorCapabilities
*/
enum MC_SUPPORTED_COLOR_TEMPERATURE implements FlagEnum
{
/**
* No color temperatures are supported.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_NONE (0x00000000),
/**
* The monitor supports 4,000 kelvins (K) color temperature.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_4000K (0x00000001),
/**
* The monitor supports 5,000 K color temperature.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_5000K (0x00000002),
/**
* The monitor supports 6,500 K color temperature.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_6500K (0x00000004),
/**
* The monitor supports 7,500 K color temperature.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_7500K (0x00000008),
/**
* The monitor supports 8,200 K color temperature.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_8200K (0x00000010),
/**
* The monitor supports 9,300 K color temperature.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_9300K (0x00000020),
/**
* The monitor supports 10,000 K color temperature.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_10000K (0x00000040),
/**
* The monitor supports 11,500 K color temperature.
*/
MC_SUPPORTED_COLOR_TEMPERATURE_11500K (0x00000080);
private int flag;
MC_SUPPORTED_COLOR_TEMPERATURE(int flag)
{
this.flag = flag;
}
@Override
public int getFlag()
{
return flag;
}
}
// ******************************************************************************
// Enumerations
// ******************************************************************************
/**
* Identifies monitor display technologies.
*/
public enum MC_DISPLAY_TECHNOLOGY_TYPE
{
/**
* Shadow-mask cathode ray tube (CRT).
*/
MC_SHADOW_MASK_CATHODE_RAY_TUBE,
/**
* Aperture-grill CRT.
*/
MC_APERTURE_GRILL_CATHODE_RAY_TUBE,
/**
* Thin-film transistor (TFT) display.
*/
MC_THIN_FILM_TRANSISTOR,
/**
* Liquid crystal on silicon (LCOS) display.
*/
MC_LIQUID_CRYSTAL_ON_SILICON,
/**
* Plasma display.
*/
MC_PLASMA,
/**
* Organic light emitting diode (LED) display.
*/
MC_ORGANIC_LIGHT_EMITTING_DIODE,
/**
* Electroluminescent display.
*/
MC_ELECTROLUMINESCENT,
/**
* Microelectromechanical display.
*/
MC_MICROELECTROMECHANICAL,
/**
* Field emission device (FED) display.
*/
MC_FIELD_EMISSION_DEVICE;
/**
* Defines a Reference to the enum
*/
public static class ByReference extends com.sun.jna.ptr.ByReference {
/**
* Create an uninitialized reference
*/
public ByReference() {
super(4);
getPointer().setInt(0, EnumUtils.UNINITIALIZED);
}
/**
* Instantiates a new reference.
* @param value the value
*/
public ByReference(MC_DISPLAY_TECHNOLOGY_TYPE value) {
super(4);
setValue(value);
}
/**
* Sets the value.
* @param value the new value
*/
public void setValue(MC_DISPLAY_TECHNOLOGY_TYPE value) {
getPointer().setInt(0, EnumUtils.toInteger(value));
}
/**
* Gets the value.
* @return the value
*/
public MC_DISPLAY_TECHNOLOGY_TYPE getValue() {
return EnumUtils.fromInteger(getPointer().getInt(0), MC_DISPLAY_TECHNOLOGY_TYPE.class);
}
}
}
/**
* Specifies whether to set or get a monitor's red, green, or blue drive.
*/
public enum MC_DRIVE_TYPE
{
/**
* Red drive
*/
MC_RED_DRIVE,
/**
* Green drive
*/
MC_GREEN_DRIVE,
/**
* Blue drive
*/
MC_BLUE_DRIVE
}
/**
* Specifies whether to get or set a monitor's red, green, or blue gain.
*/
public enum MC_GAIN_TYPE
{
/**
* Red gain
*/
MC_RED_GAIN,
/**
* Green gain
*/
MC_GREEN_GAIN,
/**
* Blue gain
*/
MC_BLUE_GAIN
}
/**
* Specifies whether to get or set the vertical or horizontal position of a monitor's display area.
*/
public enum MC_POSITION_TYPE
{
/**
* Horizontal position
*/
MC_HORIZONTAL_POSITION,
/**
* Vertical position
*/
MC_VERTICAL_POSITION
}
/**
* Specifies whether to get or set the width or height of a monitor's display area.
*/
public enum MC_SIZE_TYPE
{
/**
* Width
*/
MC_WIDTH,
/**
* Height
*/
MC_HEIGHT
}
/**
* Describes a monitor's color temperature.
*/
public enum MC_COLOR_TEMPERATURE
{
/**
* Unknown temperature.
*/
MC_COLOR_TEMPERATURE_UNKNOWN,
/**
* 4,000 kelvins (K).
*/
MC_COLOR_TEMPERATURE_4000K,
/**
* 5,000 kelvins (K).
*/
MC_COLOR_TEMPERATURE_5000K,
/**
* 6,500 kelvins (K).
*/
MC_COLOR_TEMPERATURE_6500K,
/**
* 7,500 kelvins (K).
*/
MC_COLOR_TEMPERATURE_7500K,
/**
* 8,200 kelvins (K).
*/
MC_COLOR_TEMPERATURE_8200K,
/**
* 9,300 kelvins (K).
*/
MC_COLOR_TEMPERATURE_9300K,
/**
* 10,000 kelvins (K).
*/
MC_COLOR_TEMPERATURE_10000K,
/**
* 11,500 kelvins (K).
*/
MC_COLOR_TEMPERATURE_11500K;
/**
* Defines a Reference to the enum
*/
public static class ByReference extends com.sun.jna.ptr.ByReference {
/**
* Create an uninitialized reference
*/
public ByReference() {
super(4);
getPointer().setInt(0, EnumUtils.UNINITIALIZED);
}
/**
* Instantiates a new reference.
* @param value the value
*/
public ByReference(MC_COLOR_TEMPERATURE value) {
super(4);
setValue(value);
}
/**
* Sets the value.
* @param value the new value
*/
public void setValue(MC_COLOR_TEMPERATURE value) {
getPointer().setInt(0, EnumUtils.toInteger(value));
}
/**
* Gets the value.
* @return the value
*/
public MC_COLOR_TEMPERATURE getValue() {
return EnumUtils.fromInteger(getPointer().getInt(0), MC_COLOR_TEMPERATURE.class);
}
}
}
}
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
@@ -28,58 +28,56 @@ import com.sun.jna.ptr.PointerByReference;
/**
* Kernel32 utility API.
*
* @author dblock[at]dblock.org
* @author markus[at]headcrashing[dot]eu
*/
public abstract class Kernel32Util implements WinDef {
/**
* Get current computer NetBIOS name.
* @return
* Netbios name.
*
* @return Netbios name.
*/
public static String getComputerName() {
char buffer[] = new char[WinBase.MAX_COMPUTERNAME_LENGTH + 1];
IntByReference lpnSize = new IntByReference(buffer.length);
if (! Kernel32.INSTANCE.GetComputerName(buffer, lpnSize)) {
char buffer[] = new char[WinBase.MAX_COMPUTERNAME_LENGTH + 1];
IntByReference lpnSize = new IntByReference(buffer.length);
if (!Kernel32.INSTANCE.GetComputerName(buffer, lpnSize)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
return Native.toString(buffer);
}
return Native.toString(buffer);
}
/**
* Format a message from the value obtained from {@link
* Kernel32#GetLastError} or {@link Native#getLastError}.
* Format a message from the value obtained from
* {@link Kernel32#GetLastError} or {@link Native#getLastError}.
*
* @param code
* int
* @return
* Formatted message.
* int
* @return Formatted message.
*/
public static String formatMessage(int code) {
PointerByReference buffer = new PointerByReference();
PointerByReference buffer = new PointerByReference();
if (0 == Kernel32.INSTANCE.FormatMessage(
WinBase.FORMAT_MESSAGE_ALLOCATE_BUFFER
| WinBase.FORMAT_MESSAGE_FROM_SYSTEM
| WinBase.FORMAT_MESSAGE_IGNORE_INSERTS,
null,
code,
0, // TODO: MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
buffer,
0,
null)) {
WinBase.FORMAT_MESSAGE_ALLOCATE_BUFFER
| WinBase.FORMAT_MESSAGE_FROM_SYSTEM
| WinBase.FORMAT_MESSAGE_IGNORE_INSERTS, null, code, 0, // TODO:
// MAKELANGID(LANG_NEUTRAL,
// SUBLANG_DEFAULT)
buffer, 0, null)) {
throw new LastErrorException(Kernel32.INSTANCE.GetLastError());
}
String s = buffer.getValue().getString(0, ! Boolean.getBoolean("w32.ascii"));
Kernel32.INSTANCE.LocalFree(buffer.getValue());
return s.trim();
}
String s = buffer.getValue().getWideString(0);
Kernel32.INSTANCE.LocalFree(buffer.getValue());
return s.trim();
}
/**
* Format a message from an HRESULT.
*
* @param code
* HRESULT
* @return
* Formatted message.
* HRESULT
* @return Formatted message.
*/
public static String formatMessage(HRESULT code) {
return formatMessage(code.intValue());
@@ -89,75 +87,76 @@ public abstract class Kernel32Util implements WinDef {
public static String formatMessageFromHR(HRESULT code) {
return formatMessage(code.intValue());
}
/**
* Format a system message from an error code.
*
* @param code
* Error code, typically a result of GetLastError.
* @return
* Formatted message.
* Error code, typically a result of GetLastError.
* @return Formatted message.
*/
public static String formatMessageFromLastErrorCode(int code) {
return formatMessageFromHR(W32Errors.HRESULT_FROM_WIN32(code));
}
/**
* Return the path designated for temporary files.
* @return
* Path.
*
* @return Path.
*/
public static String getTempPath() {
DWORD nBufferLength = new DWORD(WinDef.MAX_PATH);
char[] buffer = new char[nBufferLength.intValue()];
if (Kernel32.INSTANCE.GetTempPath(nBufferLength, buffer).intValue() == 0) {
char[] buffer = new char[nBufferLength.intValue()];
if (Kernel32.INSTANCE.GetTempPath(nBufferLength, buffer).intValue() == 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
return Native.toString(buffer);
}
return Native.toString(buffer);
}
public static void deleteFile(String filename) {
if (! Kernel32.INSTANCE.DeleteFile(filename)) {
if (!Kernel32.INSTANCE.DeleteFile(filename)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
}
}
/**
* Returns valid drives in the system.
* @return
* An array of valid drives.
*
* @return An array of valid drives.
*/
public static String[] getLogicalDriveStrings() {
DWORD dwSize = Kernel32.INSTANCE.GetLogicalDriveStrings(new DWORD(0), null);
if (dwSize.intValue() <= 0) {
DWORD dwSize = Kernel32.INSTANCE.GetLogicalDriveStrings(new DWORD(0),
null);
if (dwSize.intValue() <= 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
char buf[] = new char[dwSize.intValue()];
dwSize = Kernel32.INSTANCE.GetLogicalDriveStrings(dwSize, buf);
if (dwSize.intValue() <= 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
}
List<String> drives = new ArrayList<String>();
String drive = "";
// the buffer is double-null-terminated
for(int i = 0; i < buf.length - 1; i++) {
char buf[] = new char[dwSize.intValue()];
dwSize = Kernel32.INSTANCE.GetLogicalDriveStrings(dwSize, buf);
if (dwSize.intValue() <= 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
List<String> drives = new ArrayList<String>();
String drive = "";
// the buffer is double-null-terminated
for (int i = 0; i < buf.length - 1; i++) {
if (buf[i] == 0) {
drives.add(drive);
drive = "";
} else {
drive += buf[i];
}
}
return drives.toArray(new String[0]);
}
}
return drives.toArray(new String[0]);
}
/**
* Retrieves file system attributes for a specified file or directory.
*
* @param fileName
* The name of the file or directory.
* @return
* The attributes of the specified file or directory.
* The name of the file or directory.
* @return The attributes of the specified file or directory.
*/
public static int getFileAttributes(String fileName) {
int fileAttributes = Kernel32.INSTANCE.GetFileAttributes(fileName);
@@ -178,23 +177,20 @@ public abstract class Kernel32Util implements WinDef {
HANDLE hFile = null;
try {
hFile = Kernel32.INSTANCE.CreateFile(fileName,
WinNT.GENERIC_READ,
WinNT.FILE_SHARE_READ,
new WinBase.SECURITY_ATTRIBUTES(),
WinNT.OPEN_EXISTING,
WinNT.FILE_ATTRIBUTE_NORMAL,
new HANDLEByReference().getValue());
hFile = Kernel32.INSTANCE.CreateFile(fileName, WinNT.GENERIC_READ,
WinNT.FILE_SHARE_READ, new WinBase.SECURITY_ATTRIBUTES(),
WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL,
new HANDLEByReference().getValue());
if (WinBase.INVALID_HANDLE_VALUE.equals(hFile)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
int type = Kernel32.INSTANCE.GetFileType(hFile);
switch(type) {
switch (type) {
case WinNT.FILE_TYPE_UNKNOWN:
int err = Kernel32.INSTANCE.GetLastError();
switch(err) {
switch (err) {
case WinError.NO_ERROR:
break;
default:
@@ -207,7 +203,7 @@ public abstract class Kernel32Util implements WinDef {
}
} finally {
if (hFile != null) {
if (! Kernel32.INSTANCE.CloseHandle(hFile)) {
if (!Kernel32.INSTANCE.CloseHandle(hFile)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
}
@@ -220,13 +216,13 @@ public abstract class Kernel32Util implements WinDef {
public static int getDriveType(String rootName) {
return Kernel32.INSTANCE.GetDriveType(rootName);
}
/**
* Get the value of an environment variable.
*
* @param name
* Name of the environment variable.
* @return
* Value of an environment variable.
* Name of the environment variable.
* @return Value of an environment variable.
*/
public static String getEnvironmentVariable(String name) {
// obtain the buffer size
@@ -238,101 +234,195 @@ public abstract class Kernel32Util implements WinDef {
}
// obtain the value
char[] buffer = new char[size];
size = Kernel32.INSTANCE.GetEnvironmentVariable(name, buffer, buffer.length);
size = Kernel32.INSTANCE.GetEnvironmentVariable(name, buffer,
buffer.length);
if (size <= 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
return Native.toString(buffer);
return Native.toString(buffer);
}
/**
* Retrieves an integer associated with a key in the specified section of an initialization file.
*
* Retrieves an integer associated with a key in the specified section of an
* initialization file.
*
* @param appName
* The name of the section in the initialization file.
* @param keyName
* The name of the key whose value is to be retrieved. This value is in the form of a string; the {@link Kernel32#GetPrivateProfileInt} function converts
* the string into an integer and returns the integer.
* The name of the key whose value is to be retrieved. This value
* is in the form of a string; the
* {@link Kernel32#GetPrivateProfileInt} function converts the
* string into an integer and returns the integer.
* @param defaultValue
* The default value to return if the key name cannot be found in the initialization file.
* The default value to return if the key name cannot be found in
* the initialization file.
* @param fileName
* The name of the initialization file. If this parameter does not contain a full path to the file, the system searches for the file in the
* Windows directory.
* The name of the initialization file. If this parameter does
* not contain a full path to the file, the system searches for
* the file in the Windows directory.
* @return The retrieved integer, or the default if not found.
*/
public static final int getPrivateProfileInt(final String appName, final String keyName, final int defaultValue, final String fileName) {
return Kernel32.INSTANCE.GetPrivateProfileInt(appName, keyName, defaultValue, fileName);
public static final int getPrivateProfileInt(final String appName,
final String keyName, final int defaultValue, final String fileName) {
return Kernel32.INSTANCE.GetPrivateProfileInt(appName, keyName,
defaultValue, fileName);
}
/**
* Retrieves a string from the specified section in an initialization file.
*
* @param lpAppName
* The name of the section containing the key name. If this parameter is {@code null}, the {@link Kernel32#GetPrivateProfileString} function copies all
* The name of the section containing the key name. If this
* parameter is {@code null}, the
* {@link Kernel32#GetPrivateProfileString} function copies all
* section names in the file to the supplied buffer.
* @param lpKeyName
* The name of the key whose associated string is to be retrieved. If this parameter is {@code null}, all key names in the section specified by
* the {@code lpAppName} parameter are returned.
* The name of the key whose associated string is to be
* retrieved. If this parameter is {@code null}, all key names in
* the section specified by the {@code lpAppName} parameter are
* returned.
* @param lpDefault
* A default string. If the {@code lpKeyName} key cannot be found in the initialization file, {@link Kernel32#GetPrivateProfileString} returns the
* default. If this parameter is {@code null}, the default is an empty string, {@code ""}.
* A default string. If the {@code lpKeyName} key cannot be found
* in the initialization file,
* {@link Kernel32#GetPrivateProfileString} returns the default.
* If this parameter is {@code null}, the default is an empty
* string, {@code ""}.
* <p>
* Avoid specifying a default string with trailing blank characters. The function inserts a {@code null} character in the
* {@code lpReturnedString} buffer to strip any trailing blanks.
* Avoid specifying a default string with trailing blank
* characters. The function inserts a {@code null} character in
* the {@code lpReturnedString} buffer to strip any trailing
* blanks.
* </p>
* @param lpFileName
* The name of the initialization file. If this parameter does not contain a full path to the file, the system searches for the file in the
* Windows directory.
* The name of the initialization file. If this parameter does
* not contain a full path to the file, the system searches for
* the file in the Windows directory.
* @return <p>
* If neither {@code lpAppName} nor {@code lpKeyName} is {@code null} and the destination buffer is too small to hold the requested string, the
* string is truncated.
* If neither {@code lpAppName} nor {@code lpKeyName} is
* {@code null} and the destination buffer is too small to hold the
* requested string, the string is truncated.
* </p>
* <p>
* If either {@code lpAppName} or {@code lpKeyName} is {@code null} and the destination buffer is too small to hold all the strings, the last string
* is truncated and followed by two {@code null} characters.
* If either {@code lpAppName} or {@code lpKeyName} is {@code null}
* and the destination buffer is too small to hold all the strings,
* the last string is truncated and followed by two {@code null}
* characters.
* </p>
* <p>
* In the event the initialization file specified by {@code lpFileName} is not found, or contains invalid values, this function will set errorno
* with a value of '0x2' (File Not Found). To retrieve extended error information, call {@link Kernel32#GetLastError}.
* In the event the initialization file specified by
* {@code lpFileName} is not found, or contains invalid values, this
* function will set errorno with a value of '0x2' (File Not Found).
* To retrieve extended error information, call
* {@link Kernel32#GetLastError}.
* </p>
*/
public static final String getPrivateProfileString(final String lpAppName, final String lpKeyName, final String lpDefault, final String lpFileName) {
public static final String getPrivateProfileString(final String lpAppName,
final String lpKeyName, final String lpDefault,
final String lpFileName) {
final char buffer[] = new char[1024];
Kernel32.INSTANCE.GetPrivateProfileString(lpAppName, lpKeyName, lpDefault, buffer, new DWORD(buffer.length), lpFileName);
Kernel32.INSTANCE.GetPrivateProfileString(lpAppName, lpKeyName,
lpDefault, buffer, new DWORD(buffer.length), lpFileName);
return Native.toString(buffer);
}
public static final void writePrivateProfileString(final String appName, final String keyName, final String string, final String fileName) {
if (!Kernel32.INSTANCE.WritePrivateProfileString(appName, keyName, string, fileName))
public static final void writePrivateProfileString(final String appName,
final String keyName, final String string, final String fileName) {
if (!Kernel32.INSTANCE.WritePrivateProfileString(appName, keyName,
string, fileName))
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
/**
* Convenience method to get the processor information. Takes care of auto-growing the array.
*
* Convenience method to get the processor information. Takes care of
* auto-growing the array.
*
* @return the array of processor information.
*/
public static final WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[] getLogicalProcessorInformation()
{
int sizePerStruct = new WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION().size();
WinDef.DWORDByReference bufferSize = new WinDef.DWORDByReference(new WinDef.DWORD(sizePerStruct));
public static final WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[] getLogicalProcessorInformation() {
int sizePerStruct = new WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION()
.size();
WinDef.DWORDByReference bufferSize = new WinDef.DWORDByReference(
new WinDef.DWORD(sizePerStruct));
Memory memory;
while (true)
{
while (true) {
memory = new Memory(bufferSize.getValue().intValue());
if (! Kernel32.INSTANCE.GetLogicalProcessorInformation(memory, bufferSize))
{
if (!Kernel32.INSTANCE.GetLogicalProcessorInformation(memory,
bufferSize)) {
int err = Kernel32.INSTANCE.GetLastError();
if (err != WinError.ERROR_INSUFFICIENT_BUFFER)
throw new Win32Exception(err);
}
else
{
throw new Win32Exception(err);
} else {
break;
}
}
WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION firstInformation = new WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION(memory);
int returnedStructCount = bufferSize.getValue().intValue() / sizePerStruct;
return (WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[]) firstInformation.toArray(new WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[returnedStructCount]);
WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION firstInformation = new WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION(
memory);
int returnedStructCount = bufferSize.getValue().intValue()
/ sizePerStruct;
return (WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[]) firstInformation
.toArray(new WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[returnedStructCount]);
}
/**
* Retrieves all the keys and values for the specified section of an initialization file.
*
* <p>
* Each string has the following format: {@code key=string}.
* </p>
* <p>
* This operation is atomic; no updates to the specified initialization file are allowed while this method is executed.
* </p>
*
* @param appName
* The name of the section in the initialization file.
* @param fileName
* The name of the initialization file. If this parameter does not contain a full path to the file, the system searches for the file in the
* Windows directory.
* @return The key name and value pairs associated with the named section.
*/
public static final String[] getPrivateProfileSection(final String appName, final String fileName) {
final char buffer[] = new char[32768]; // Maximum section size according to MSDN (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724348(v=vs.85).aspx)
if (Kernel32.INSTANCE.GetPrivateProfileSection(appName, buffer, new DWORD(buffer.length), fileName).intValue() == 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
return new String(buffer).split("\0");
}
/**
* Retrieves the names of all sections in an initialization file.
* <p>
* This operation is atomic; no updates to the initialization file are allowed while this method is executed.
* </p>
*
* @param fileName
* The name of the initialization file. If this parameter is {@code NULL}, the function searches the Win.ini file. If this parameter does not
* contain a full path to the file, the system searches for the file in the Windows directory.
* @return the section names associated with the named file.
*/
public static final String[] getPrivateProfileSectionNames(final String fileName) {
final char buffer[] = new char[65536]; // Maximum INI file size according to MSDN (http://support.microsoft.com/kb/78346)
if (Kernel32.INSTANCE.GetPrivateProfileSectionNames(buffer, new DWORD(buffer.length), fileName).intValue() == 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
return new String(buffer).split("\0");
}
/**
* @param appName
* The name of the section in which data is written. This section name is typically the name of the calling application.
* @param strings
* The new key names and associated values that are to be written to the named section. Each entry must be of the form {@code key=value}.
* @param fileName
* The name of the initialization file. If this parameter does not contain a full path for the file, the function searches the Windows directory
* for the file. If the file does not exist and lpFileName does not contain a full path, the function creates the file in the Windows directory.
*/
public static final void writePrivateProfileSection(final String appName, final String[] strings, final String fileName) {
final StringBuilder buffer = new StringBuilder();
for (final String string : strings)
buffer.append(string).append('\0');
buffer.append('\0');
if (! Kernel32.INSTANCE.WritePrivateProfileSection(appName, buffer.toString(), fileName)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
}
}
@@ -0,0 +1,329 @@
package com.sun.jna.platform.win32;
import com.sun.jna.platform.win32.Guid.GUID;
/**
* Ported from KnownFolders.h.
* Microsoft Windows SDK 7.0A.
* @author Martin Steiger
*/
public class KnownFolders
{
/**
* display name: "Network"<br/>
* legacy display name: "My Network Places"<br/>
* default path: <br/>
* legacy CSIDL value: CSIDL_NETWORK<br/>
*/
public static final GUID FOLDERID_NetworkFolder = GUID.fromString("{D20BEEC4-5CA8-4905-AE3B-BF251EA09B53}");
//{0AC0837C-BBF8-452A-850D-79D08E667CA7}
public static final GUID FOLDERID_ComputerFolder = GUID.fromString("{0AC0837C-BBF8-452A-850D-79D08E667CA7}");
//{4D9F7874-4E0C-4904-967B-40B0D20C3E4B}
public static final GUID FOLDERID_InternetFolder = GUID.fromString("{4D9F7874-4E0C-4904-967B-40B0D20C3E4B}");
//{82A74AEB-AEB4-465C-A014-D097EE346D63}
public static final GUID FOLDERID_ControlPanelFolder = GUID.fromString("{82A74AEB-AEB4-465C-A014-D097EE346D63}");
//{76FC4E2D-D6AD-4519-A663-37BD56068185}
public static final GUID FOLDERID_PrintersFolder = GUID.fromString("{76FC4E2D-D6AD-4519-A663-37BD56068185}");
//{43668BF8-C14E-49B2-97C9-747784D784B7}
public static final GUID FOLDERID_SyncManagerFolder = GUID.fromString("{43668BF8-C14E-49B2-97C9-747784D784B7}");
//{0F214138-B1D3-4a90-BBA9-27CBC0C5389A}
public static final GUID FOLDERID_SyncSetupFolder = GUID.fromString("{0f214138-b1d3-4a90-bba9-27cbc0c5389a}");
//{4bfefb45-347d-4006-a5be-ac0cb0567192}
public static final GUID FOLDERID_ConflictFolder = GUID.fromString("{4bfefb45-347d-4006-a5be-ac0cb0567192}");
//{289a9a43-be44-4057-a41b-587a76d7e7f9}
public static final GUID FOLDERID_SyncResultsFolder = GUID.fromString("{289a9a43-be44-4057-a41b-587a76d7e7f9}");
//{B7534046-3ECB-4C18-BE4E-64CD4CB7D6AC}
public static final GUID FOLDERID_RecycleBinFolder = GUID.fromString("{B7534046-3ECB-4C18-BE4E-64CD4CB7D6AC}");
//{6F0CD92B-2E97-45D1-88FF-B0D186B8DEDD}
public static final GUID FOLDERID_ConnectionsFolder = GUID.fromString("{6F0CD92B-2E97-45D1-88FF-B0D186B8DEDD}");
//{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}
public static final GUID FOLDERID_Fonts = GUID.fromString("{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}");
/**
* display name: "Desktop"<br/>
* default path: "C:\Users\<UserName>\Desktop"
* legacy default path: "C:\Documents and Settings\<userName>\Desktop"
* legacy CSIDL value: CSIDL_DESKTOP
*/
//{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}
public static final GUID FOLDERID_Desktop = GUID.fromString("{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}");
//{B97D20BB-F46A-4C97-BA10-5E3608430854}
public static final GUID FOLDERID_Startup = GUID.fromString("{B97D20BB-F46A-4C97-BA10-5E3608430854}");
//{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}
public static final GUID FOLDERID_Programs = GUID.fromString("{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}");
//{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}
public static final GUID FOLDERID_StartMenu = GUID.fromString("{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}");
//{AE50C081-EBD2-438A-8655-8A092E34987A}
public static final GUID FOLDERID_Recent = GUID.fromString("{AE50C081-EBD2-438A-8655-8A092E34987A}");
//{8983036C-27C0-404B-8F08-102D10DCFD74}
public static final GUID FOLDERID_SendTo = GUID.fromString("{8983036C-27C0-404B-8F08-102D10DCFD74}");
//{FDD39AD0-238F-46AF-ADB4-6C85480369C7}
public static final GUID FOLDERID_Documents = GUID.fromString("{FDD39AD0-238F-46AF-ADB4-6C85480369C7}");
//{1777F761-68AD-4D8A-87BD-30B759FA33DD}
public static final GUID FOLDERID_Favorites = GUID.fromString("{1777F761-68AD-4D8A-87BD-30B759FA33DD}");
//{C5ABBF53-E17F-4121-8900-86626FC2C973}
public static final GUID FOLDERID_NetHood = GUID.fromString("{C5ABBF53-E17F-4121-8900-86626FC2C973}");
//{9274BD8D-CFD1-41C3-B35E-B13F55A758F4}
public static final GUID FOLDERID_PrintHood = GUID.fromString("{9274BD8D-CFD1-41C3-B35E-B13F55A758F4}");
//{A63293E8-664E-48DB-A079-DF759E0509F7}
public static final GUID FOLDERID_Templates = GUID.fromString("{A63293E8-664E-48DB-A079-DF759E0509F7}");
//{82A5EA35-D9CD-47C5-9629-E15D2F714E6E}
public static final GUID FOLDERID_CommonStartup = GUID.fromString("{82A5EA35-D9CD-47C5-9629-E15D2F714E6E}");
//{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}
public static final GUID FOLDERID_CommonPrograms = GUID.fromString("{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}");
//{A4115719-D62E-491D-AA7C-E74B8BE3B067}
public static final GUID FOLDERID_CommonStartMenu = GUID.fromString("{A4115719-D62E-491D-AA7C-E74B8BE3B067}");
//{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}
public static final GUID FOLDERID_PublicDesktop = GUID.fromString("{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}");
//{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}
public static final GUID FOLDERID_ProgramData = GUID.fromString("{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}");
//{B94237E7-57AC-4347-9151-B08C6C32D1F7}
public static final GUID FOLDERID_CommonTemplates = GUID.fromString("{B94237E7-57AC-4347-9151-B08C6C32D1F7}");
//{ED4824AF-DCE4-45A8-81E2-FC7965083634}
public static final GUID FOLDERID_PublicDocuments = GUID.fromString("{ED4824AF-DCE4-45A8-81E2-FC7965083634}");
//{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}
public static final GUID FOLDERID_RoamingAppData = GUID.fromString("{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}");
//{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}
public static final GUID FOLDERID_LocalAppData = GUID.fromString("{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}");
//{A520A1A4-1780-4FF6-BD18-167343C5AF16}
public static final GUID FOLDERID_LocalAppDataLow = GUID.fromString("{A520A1A4-1780-4FF6-BD18-167343C5AF16}");
//{352481E8-33BE-4251-BA85-6007CAEDCF9D}
public static final GUID FOLDERID_InternetCache = GUID.fromString("{352481E8-33BE-4251-BA85-6007CAEDCF9D}");
//{2B0F765D-C0E9-4171-908E-08A611B84FF6}
public static final GUID FOLDERID_Cookies = GUID.fromString("{2B0F765D-C0E9-4171-908E-08A611B84FF6}");
//{D9DC8A3B-B784-432E-A781-5A1130A75963}
public static final GUID FOLDERID_History = GUID.fromString("{D9DC8A3B-B784-432E-A781-5A1130A75963}");
//{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}
public static final GUID FOLDERID_System = GUID.fromString("{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}");
//{D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27}
public static final GUID FOLDERID_SystemX86 = GUID.fromString("{D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27}");
//{F38BF404-1D43-42F2-9305-67DE0B28FC23}
public static final GUID FOLDERID_Windows = GUID.fromString("{F38BF404-1D43-42F2-9305-67DE0B28FC23}");
//{5E6C858F-0E22-4760-9AFE-EA3317B67173}
public static final GUID FOLDERID_Profile = GUID.fromString("{5E6C858F-0E22-4760-9AFE-EA3317B67173}");
//{33E28130-4E1E-4676-835A-98395C3BC3BB}
public static final GUID FOLDERID_Pictures = GUID.fromString("{33E28130-4E1E-4676-835A-98395C3BC3BB}");
//{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}
public static final GUID FOLDERID_ProgramFilesX86 = GUID.fromString("{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}");
//{DE974D24-D9C6-4D3E-BF91-F4455120B917}
public static final GUID FOLDERID_ProgramFilesCommonX86 = GUID.fromString("{DE974D24-D9C6-4D3E-BF91-F4455120B917}");
//{6D809377-6AF0-444b-8957-A3773F02200E}
public static final GUID FOLDERID_ProgramFilesX64 = GUID.fromString("{6d809377-6af0-444b-8957-a3773f02200e}");
//{6365D5A7-0F0D-45e5-87F6-0DA56B6A4F7D}
public static final GUID FOLDERID_ProgramFilesCommonX64 = GUID.fromString("{6365d5a7-0f0d-45e5-87f6-0da56b6a4f7d}");
//{905e63b6-c1bf-494e-b29c-65b732d3d21a}
public static final GUID FOLDERID_ProgramFiles = GUID.fromString("{905e63b6-c1bf-494e-b29c-65b732d3d21a}");
//{F7F1ED05-9F6D-47A2-AAAE-29D317C6F066}
public static final GUID FOLDERID_ProgramFilesCommon = GUID.fromString("{F7F1ED05-9F6D-47A2-AAAE-29D317C6F066}");
//{5cd7aee2-2219-4a67-b85d-6c9ce15660cb}
public static final GUID FOLDERID_UserProgramFiles = GUID.fromString("{5cd7aee2-2219-4a67-b85d-6c9ce15660cb}");
//{bcbd3057-ca5c-4622-b42d-bc56db0ae516}
public static final GUID FOLDERID_UserProgramFilesCommon = GUID.fromString("{bcbd3057-ca5c-4622-b42d-bc56db0ae516}");
//{724EF170-A42D-4FEF-9F26-B60E846FBA4F}
public static final GUID FOLDERID_AdminTools = GUID.fromString("{724EF170-A42D-4FEF-9F26-B60E846FBA4F}");
//{D0384E7D-BAC3-4797-8F14-CBA229B392B5}
public static final GUID FOLDERID_CommonAdminTools = GUID.fromString("{D0384E7D-BAC3-4797-8F14-CBA229B392B5}");
//{4BD8D571-6D19-48D3-BE97-422220080E43}
public static final GUID FOLDERID_Music = GUID.fromString("{4BD8D571-6D19-48D3-BE97-422220080E43}");
//{18989B1D-99B5-455B-841C-AB7C74E4DDFC}
public static final GUID FOLDERID_Videos = GUID.fromString("{18989B1D-99B5-455B-841C-AB7C74E4DDFC}");
//{C870044B-F49E-4126-A9C3-B52A1FF411E8}
public static final GUID FOLDERID_Ringtones = GUID.fromString("{C870044B-F49E-4126-A9C3-B52A1FF411E8}");
//{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}
public static final GUID FOLDERID_PublicPictures = GUID.fromString("{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}");
//{3214FAB5-9757-4298-BB61-92A9DEAA44FF}
public static final GUID FOLDERID_PublicMusic = GUID.fromString("{3214FAB5-9757-4298-BB61-92A9DEAA44FF}");
//{2400183A-6185-49FB-A2D8-4A392A602BA3}
public static final GUID FOLDERID_PublicVideos = GUID.fromString("{2400183A-6185-49FB-A2D8-4A392A602BA3}");
//{E555AB60-153B-4D17-9F04-A5FE99FC15EC}
public static final GUID FOLDERID_PublicRingtones = GUID.fromString("{E555AB60-153B-4D17-9F04-A5FE99FC15EC}");
//{8AD10C31-2ADB-4296-A8F7-E4701232C972}
public static final GUID FOLDERID_ResourceDir = GUID.fromString("{8AD10C31-2ADB-4296-A8F7-E4701232C972}");
//{2A00375E-224C-49DE-B8D1-440DF7EF3DDC}
public static final GUID FOLDERID_LocalizedResourcesDir = GUID.fromString("{2A00375E-224C-49DE-B8D1-440DF7EF3DDC}");
//{C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D}
public static final GUID FOLDERID_CommonOEMLinks = GUID.fromString("{C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D}");
//{9E52AB10-F80D-49DF-ACB8-4330F5687855}
public static final GUID FOLDERID_CDBurning = GUID.fromString("{9E52AB10-F80D-49DF-ACB8-4330F5687855}");
//{0762D272-C50A-4BB0-A382-697DCD729B80}
public static final GUID FOLDERID_UserProfiles = GUID.fromString("{0762D272-C50A-4BB0-A382-697DCD729B80}");
//{DE92C1C7-837F-4F69-A3BB-86E631204A23}
public static final GUID FOLDERID_Playlists = GUID.fromString("{DE92C1C7-837F-4F69-A3BB-86E631204A23}");
//{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}
public static final GUID FOLDERID_SamplePlaylists = GUID.fromString("{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}");
//{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}
public static final GUID FOLDERID_SampleMusic = GUID.fromString("{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}");
//{C4900540-2379-4C75-844B-64E6FAF8716B}
public static final GUID FOLDERID_SamplePictures = GUID.fromString("{C4900540-2379-4C75-844B-64E6FAF8716B}");
//{859EAD94-2E85-48AD-A71A-0969CB56A6CD}
public static final GUID FOLDERID_SampleVideos = GUID.fromString("{859EAD94-2E85-48AD-A71A-0969CB56A6CD}");
//{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}
public static final GUID FOLDERID_PhotoAlbums = GUID.fromString("{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}");
//{DFDF76A2-C82A-4D63-906A-5644AC457385}
public static final GUID FOLDERID_Public = GUID.fromString("{DFDF76A2-C82A-4D63-906A-5644AC457385}");
//{df7266ac-9274-4867-8d55-3bd661de872d}
public static final GUID FOLDERID_ChangeRemovePrograms = GUID.fromString("{df7266ac-9274-4867-8d55-3bd661de872d}");
//{a305ce99-f527-492b-8b1a-7e76fa98d6e4}
public static final GUID FOLDERID_AppUpdates = GUID.fromString("{a305ce99-f527-492b-8b1a-7e76fa98d6e4}");
//{de61d971-5ebc-4f02-a3a9-6c82895e5c04}
public static final GUID FOLDERID_AddNewPrograms = GUID.fromString("{de61d971-5ebc-4f02-a3a9-6c82895e5c04}");
//{374DE290-123F-4565-9164-39C4925E467B}
public static final GUID FOLDERID_Downloads = GUID.fromString("{374de290-123f-4565-9164-39c4925e467b}");
//{3D644C9B-1FB8-4f30-9B45-F670235F79C0}
public static final GUID FOLDERID_PublicDownloads = GUID.fromString("{3d644c9b-1fb8-4f30-9b45-f670235f79c0}");
//{7d1d3a04-debb-4115-95cf-2f29da2920da}
public static final GUID FOLDERID_SavedSearches = GUID.fromString("{7d1d3a04-debb-4115-95cf-2f29da2920da}");
//{52a4f021-7b75-48a9-9f6b-4b87a210bc8f}
public static final GUID FOLDERID_QuickLaunch = GUID.fromString("{52a4f021-7b75-48a9-9f6b-4b87a210bc8f}");
//{56784854-C6CB-462b-8169-88E350ACB882}
public static final GUID FOLDERID_Contacts = GUID.fromString("{56784854-c6cb-462b-8169-88e350acb882}");
//{A75D362E-50FC-4fb7-AC2C-A8BEAA314493}
public static final GUID FOLDERID_SidebarParts = GUID.fromString("{a75d362e-50fc-4fb7-ac2c-a8beaa314493}");
//{7B396E54-9EC5-4300-BE0A-2482EBAE1A26}
public static final GUID FOLDERID_SidebarDefaultParts = GUID.fromString("{7b396e54-9ec5-4300-be0a-2482ebae1a26}");
//{DEBF2536-E1A8-4c59-B6A2-414586476AEA}
public static final GUID FOLDERID_PublicGameTasks = GUID.fromString("{debf2536-e1a8-4c59-b6a2-414586476aea}");
//{054FAE61-4DD8-4787-80B6-090220C4B700}
public static final GUID FOLDERID_GameTasks = GUID.fromString("{054fae61-4dd8-4787-80b6-090220c4b700}");
//{4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4}
public static final GUID FOLDERID_SavedGames = GUID.fromString("{4c5c32ff-bb9d-43b0-b5b4-2d72e54eaaa4}");
//{CAC52C1A-B53D-4edc-92D7-6B2E8AC19434}
public static final GUID FOLDERID_Games = GUID.fromString("{cac52c1a-b53d-4edc-92d7-6b2e8ac19434}");
//{98ec0e18-2098-4d44-8644-66979315a281}
public static final GUID FOLDERID_SEARCH_MAPI = GUID.fromString("{98ec0e18-2098-4d44-8644-66979315a281}");
//{ee32e446-31ca-4aba-814f-a5ebd2fd6d5e}
public static final GUID FOLDERID_SEARCH_CSC = GUID.fromString("{ee32e446-31ca-4aba-814f-a5ebd2fd6d5e}");
//{bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968}
public static final GUID FOLDERID_Links = GUID.fromString("{bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968}");
//{f3ce0f7c-4901-4acc-8648-d5d44b04ef8f}
public static final GUID FOLDERID_UsersFiles = GUID.fromString("{f3ce0f7c-4901-4acc-8648-d5d44b04ef8f}");
//{A302545D-DEFF-464b-ABE8-61C8648D939B}
public static final GUID FOLDERID_UsersLibraries = GUID.fromString("{a302545d-deff-464b-abe8-61c8648d939b}");
//{190337d1-b8ca-4121-a639-6d472d16972a}
public static final GUID FOLDERID_SearchHome = GUID.fromString("{190337d1-b8ca-4121-a639-6d472d16972a}");
//{2C36C0AA-5812-4b87-BFD0-4CD0DFB19B39}
public static final GUID FOLDERID_OriginalImages = GUID.fromString("{2C36C0AA-5812-4b87-bfd0-4cd0dfb19b39}");
//{7b0db17d-9cd2-4a93-9733-46cc89022e7c}
public static final GUID FOLDERID_DocumentsLibrary = GUID.fromString("{7b0db17d-9cd2-4a93-9733-46cc89022e7c}");
//{2112AB0A-C86A-4ffe-A368-0DE96E47012E}
public static final GUID FOLDERID_MusicLibrary = GUID.fromString("{2112ab0a-c86a-4ffe-a368-0de96e47012e}");
//{A990AE9F-A03B-4e80-94BC-9912D7504104}
public static final GUID FOLDERID_PicturesLibrary = GUID.fromString("{a990ae9f-a03b-4e80-94bc-9912d7504104}");
//{491E922F-5643-4af4-A7EB-4E7A138D8174}
public static final GUID FOLDERID_VideosLibrary = GUID.fromString("{491e922f-5643-4af4-a7eb-4e7a138d8174}");
//{1A6FDBA2-F42D-4358-A798-B74D745926C5}
public static final GUID FOLDERID_RecordedTVLibrary = GUID.fromString("{1a6fdba2-f42d-4358-a798-b74d745926c5}");
//{52528A6B-B9E3-4add-B60D-588C2DBA842D}
public static final GUID FOLDERID_HomeGroup = GUID.fromString("{52528a6b-b9e3-4add-b60d-588c2dba842d}");
//{5CE4A5E9-E4EB-479D-B89F-130C02886155}
public static final GUID FOLDERID_DeviceMetadataStore = GUID.fromString("{5ce4a5e9-e4eb-479d-b89f-130c02886155}");
//{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}
public static final GUID FOLDERID_Libraries = GUID.fromString("{1b3ea5dc-b587-4786-b4ef-bd1dc332aeae}");
//{48daf80b-e6cf-4f4e-b800-0e69d84ee384}
public static final GUID FOLDERID_PublicLibraries = GUID.fromString("{48daf80b-e6cf-4f4e-b800-0e69d84ee384}");
//{9e3995ab-1f9c-4f13-b827-48b24b6c7174}
public static final GUID FOLDERID_UserPinned = GUID.fromString("{9e3995ab-1f9c-4f13-b827-48b24b6c7174}");
//{bcb5256f-79f6-4cee-b725-dc34e402fd46}
public static final GUID FOLDERID_ImplicitAppShortcuts = GUID.fromString("{bcb5256f-79f6-4cee-b725-dc34e402fd46}");
}
@@ -0,0 +1,116 @@
/*
* Copyright 2014 Martin Steiger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jna.platform.win32;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Structure;
import com.sun.jna.platform.EnumUtils;
import com.sun.jna.platform.win32.WinDef.BYTE;
import com.sun.jna.platform.win32.WinDef.DWORD;
/**
* Conversion of LowLevelMonitorConfigurationAPI.h
* @author Martin Steiger
*/
public interface LowLevelMonitorConfigurationAPI
{
/**
* Contains information from a monitor's timing report.
*/
class MC_TIMING_REPORT extends Structure
{
/**
* The monitor's horizontal synchronization frequency in Hz.
*/
public DWORD dwHorizontalFrequencyInHZ;
/**
* The monitor's vertical synchronization frequency in Hz.
*/
public DWORD dwVerticalFrequencyInHZ;
/**
* Timing status byte. For more information about this value, see the Display Data Channel Command
* Interface (DDC/CI) standard.
*/
public BYTE bTimingStatusByte;
@Override
protected List<String> getFieldOrder()
{
return Arrays.asList("dwHorizontalFrequencyInHZ", "dwVerticalFrequencyInHZ", "bTimingStatusByte");
}
}
/**
* Describes a Virtual Control Panel (VCP) code type.
*/
enum MC_VCP_CODE_TYPE
{
/**
* Momentary VCP code. Sending a command of this type causes the monitor to initiate a self-timed
* operation and then revert to its original state. Examples include display tests and degaussing.
*/
MC_MOMENTARY,
/**
* Set Parameter VCP code. Sending a command of this type changes some aspect of the monitor's operation.
*/
MC_SET_PARAMETER;
/**
* Defines a Reference to the enum
*/
public static class ByReference extends com.sun.jna.ptr.ByReference {
/**
* Create an uninitialized reference
*/
public ByReference() {
super(4);
}
/**
* Instantiates a new reference.
* @param value the value
*/
public ByReference(MC_VCP_CODE_TYPE value) {
super(4);
setValue(value);
}
/**
* Sets the value.
* @param value the new value
*/
public void setValue(MC_VCP_CODE_TYPE value) {
getPointer().setInt(0, EnumUtils.toInteger(value));
}
/**
* Gets the value.
* @return the value
*/
public MC_VCP_CODE_TYPE getValue() {
return EnumUtils.fromInteger(getPointer().getInt(0), MC_VCP_CODE_TYPE.class);
}
}
}
}
@@ -69,9 +69,9 @@ public interface NTSecApi extends StdCallLibrary {
if (data.length < 2 || data[data.length - 1] != 0) {
Memory newdata = new Memory(data.length + 2);
newdata.write(0, data, 0, data.length);
return newdata.getString(0, true);
return newdata.getWideString(0);
}
return Buffer.getString(0, true);
return Buffer.getWideString(0);
}
}
@@ -111,7 +111,7 @@ public abstract class Netapi32Util {
if (LMErr.NERR_Success != rc) {
throw new Win32Exception(rc);
}
return bufptr.getValue().getString(0, true);
return bufptr.getValue().getWideString(0);
} finally {
if (W32Errors.ERROR_SUCCESS != Netapi32.INSTANCE.NetApiBufferFree(bufptr.getValue())) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
@@ -167,7 +167,7 @@ public abstract class Netapi32Util {
throw new Win32Exception(rc);
}
// type of domain: bufferType.getValue()
return lpNameBuffer.getValue().getString(0, true);
return lpNameBuffer.getValue().getWideString(0);
} finally {
if (lpNameBuffer.getPointer() != null) {
int rc = Netapi32.INSTANCE.NetApiBufferFree(lpNameBuffer.getValue());
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
@@ -15,6 +15,7 @@ package com.sun.jna.platform.win32;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.BaseTSD.SIZE_T;
import com.sun.jna.platform.win32.Guid.CLSID;
import com.sun.jna.platform.win32.Guid.GUID;
import com.sun.jna.platform.win32.WinDef.LPVOID;
@@ -186,7 +187,7 @@ public interface Ole32 extends StdCallLibrary {
* are the only two functions that can be used to generate a CLSID
* for an OLE 1 object.
*/
HRESULT CLSIDFromProgID(String lpszProgID, CLSID lpclsid);
HRESULT CLSIDFromProgID(String lpszProgID, CLSID.ByReference lpclsid);
/**
* Converts a string generated by the StringFromCLSID function back into the
@@ -212,6 +213,58 @@ public interface Ole32 extends StdCallLibrary {
*
* REGDB_E_READREGDB The registry could not be opened for reading.
*/
HRESULT CLSIDFromString(WString lpsz, CLSID pclsid);
HRESULT CLSIDFromString(WString lpsz, CLSID.ByReference pclsid);
/**
* Allocates a block of task memory in the same way that IMalloc::Alloc does. CoTaskMemAlloc uses the default
* allocator to allocate a memory block in the same way that IMalloc::Alloc does. It is not necessary to call the
* CoGetMalloc function before calling CoTaskMemAlloc.
* <br/><br/>The initial contents of the returned memory block are
* undefined - there is no guarantee that the block has been initialized. The allocated block may be larger than cb
* bytes because of the space required for alignment and for maintenance information.
* <br/><br/>
* If cb is 0, CoTaskMemAlloc
* allocates a zero-length item and returns a valid pointer to that item. If there is insufficient memory available,
* CoTaskMemAlloc returns NULL. Applications should always check the return value from this function, even when
* requesting small amounts of memory, because there is no guarantee that the memory will be allocated.
* @param cb The size of the memory block to be allocated, in bytes.
* @return If the function succeeds, it returns the allocated memory block. Otherwise, it returns NULL.
*/
Pointer CoTaskMemAlloc(long cb);
/**
* Changes the size of a previously allocated block of task memory. This function changes the size of a previously
* allocated memory block in the same way that IMalloc::Realloc does. It is not necessary to call the CoGetMalloc
* function to get a pointer to the OLE allocator before calling CoTaskMemRealloc.
* <br/><br/>
* The pv parameter points to the
* beginning of the memory block. If pv is NULL, CoTaskMemRealloc allocates a new memory block in the same way as
* the CoTaskMemAlloc function. If pv is not NULL, it should be a pointer returned by a prior call to
* CoTaskMemAlloc.
* <br/><br>
* The cb parameter specifies the size of the new block. The contents of the block are unchanged up
* to the shorter of the new and old sizes, although the new block can be in a different location. Because the new
* block can be in a different memory location, the pointer returned by CoTaskMemRealloc is not guaranteed to be the
* pointer passed through the pv argument. If pv is not NULL and cb is 0, then the memory pointed to by pv is freed.
* <br/><br/>
* CoTaskMemRealloc returns a void pointer to the reallocated (and possibly moved) memory block. The return value is
* NULL if the size is 0 and the buffer argument is not NULL, or if there is not enough memory available to expand
* the block to the specified size. In the first case, the original block is freed; in the second case, the original
* block is unchanged. The storage space pointed to by the return value is guaranteed to be suitably aligned for
* storage of any type of object. To get a pointer to a type other than void, use a type cast on the return value.
* @param pv A pointer to the memory block to be reallocated. This parameter can be NULL.
* @param cb The size of the memory block to be reallocated, in bytes. This parameter can be 0.
* @return If the function succeeds, it returns the reallocated memory block. Otherwise, it returns NULL.
*/
Pointer CoTaskMemRealloc(Pointer pv, long cb);
/**
* Frees a block of task memory previously allocated through a call to the {@link #CoTaskMemAlloc} or
* {@link #CoTaskMemRealloc} function. The function uses the default OLE allocator. The number of bytes
* freed equals the number of bytes that were originally allocated or reallocated. After the call, the memory block
* pointed to by pv is invalid and can no longer be used.
* @param pv A pointer to the memory block to be freed. If this parameter is NULL, the function has no effect.
*/
void CoTaskMemFree(Pointer pv);
}
@@ -1,4 +1,4 @@
/* copyright (c) 2012 Tobias Wolf, All Rights Reserved
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -32,12 +32,13 @@ import com.sun.jna.platform.win32.WinDef.LCID;
import com.sun.jna.platform.win32.WinDef.PVOID;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.platform.win32.COM.ITypeLib;
import com.sun.jna.platform.win32.COM.TypeLib;
import com.sun.jna.ptr.DoubleByReference;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
// TODO: Auto-generated Javadoc
/**
* Oleaut32.dll Interface.
*
@@ -123,6 +124,17 @@ public interface OleAuto extends StdCallLibrary {
*/
public void SysFreeString(BSTR bstr);
/**
* The VariantInit function initializes the VARIANTARG by setting the vt
* field to VT_EMPTY. Unlike VariantClear, this function does not interpret
* the current contents of the VARIANTARG. Use VariantInit to initialize new
* local variables of type VARIANTARG (or VARIANT).
*
* @param pvarg
* The variant to initialize.
*/
public void VariantInit(VARIANT.ByReference pvarg);
/**
* The VariantInit function initializes the VARIANTARG by setting the vt
* field to VT_EMPTY. Unlike VariantClear, this function does not interpret
@@ -224,7 +236,7 @@ public interface OleAuto extends StdCallLibrary {
* A safe array descriptor, or null if the array could not be
* created.
*/
public SAFEARRAY SafeArrayCreate(VARTYPE vt, int cDims,
public SAFEARRAY.ByReference SafeArrayCreate(VARTYPE vt, int cDims,
SAFEARRAYBOUND[] rgsabound);
/**
@@ -459,7 +471,7 @@ public interface OleAuto extends StdCallLibrary {
* TYPE_E_CANTLOADLIBRARY The type library or DLL could not be
* loaded.
*/
HRESULT LoadTypeLib(WString szFile, ITypeLib pptlib);
public HRESULT LoadTypeLib(WString szFile, PointerByReference pptlib);
/**
* Converts a system time to a variant representation.
@@ -472,6 +484,6 @@ public interface OleAuto extends StdCallLibrary {
*
* @return The function returns TRUE on success and FALSE otherwise.
*/
int SystemTimeToVariantTime(SYSTEMTIME lpSystemTime,
public int SystemTimeToVariantTime(SYSTEMTIME lpSystemTime,
DoubleByReference pvtime);
}

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais