ODMdev: ActiveODMA Development Framework

devNote d061003
 ODMJNI 1.0 OdmNative100 ODMA-Access Implementation
Diary & Job Jar

ODMdev>devNotes>
2006>10>

d061003a>
0.06 2008-04-23 21:12 -0700

Status

Date

Description

     
     
     
  2007-01-03 There is a major refactoring that icalled for.  I need to define ODMA-specific, application-mode HRESULTs to use as carriers for ODMSTATUS values.  This allows single functions to provide higher-level operations and I can eliminate those functions that are now separate so the ODMSTATUS is delivered.  These functions are fragile because they have preconditions on the parameters being obtained from other functions in sequence.  In future, that coupling will be ensured by making all ODMA calls under the covers and only exposing "complete" functions of the Practical100 kind.
  2007-01-03 d061003g.txt license comment on the top, paragraph 2, "If the license has has been separated ..." duplicate word.
  2006-12-20 We can simplify the dialogs and narrative in Check05 because we don't need to see all of the details that we verified in earlier tests.  There might be a regression reason, but probably not.
  2006-11-28 d061003e: The .txt file has an altered date in the top right but its other information has not been updated.  It is not the .txt file inside the archive.
  2006-11-27 0.30alpha: Move the build process and the source code to a deeper level in the hierarchy, with only the .obj and the public header files at the OdmNative100 level. [dh:2007-01-03 I didn't do that.  It doesn't matter.  The real deliverables are over into odmjni100, and that part only has copies of what matters for ODMJNI 1.0 and the use of ODMA is entirely encapsulated in the OdmNative bits that are carried over.  The better solution is to give OdmNative100 its own deployment and delivery process at some point, with ODMJNI 1.0 simply relying on the deliverable for using the library, not building it.]
  2006-11-27 d061003: Add References and Resources to the cover page, especially on the use of COM binary interfaces, in the manner this was done for JNI on d061101.
  2006-11-26 OdmNative.hpp: Document the error cases as part of the agreement for OdmBindNative100. 
  2006-11-26 Setup03: The TestSetup03.c hello function refers to stdout directly where out should be used.  See how it's cleaned up in Setup03.
  2006-11-26 Setup02: The TestSetup02.c hello function refers to stdout directly where out should be used.  See how it's cleaned up in Setup03.
  2006-11-25 d061003f: Create and use as a placeholder for backup of Setup03.  Stitch it in before d061003g.
  2006-11-25 OdmNative100: Look at optimizations of OdmNative.cpp compiling at some point: /Ox, /GF, /Gy, /GT and others that might make a difference.
  2006-11-25 OdmNative100: Fix the tryConsoleWindow code to Load kernel32.dll and check for the GetConsoleWindow API.  This way we can run degraded on pre-Windows 2000 versions without failing to load altogether.
  2006-11-23 I want to make the individual class methods be local to the file and only exposed outside via the interfaces and the virtual-method vtable access.  I don't know why I can't do that.  I need to figure out what I am missing in what I am allowed to say in C++ to make a method implementation not be visible to the linker.
  2006-11-17 Application IDs: Find out any additional restrictions on Registry Keys too.
  2006-11-15 OdmBindNative100: I need some confirmation tests for Application ID filtering.  [dh:2006-11-26 This rolls back into odmjni100 too.]
  2006-11-15 OdmBindNative100: I need a solid test to confirm error cases of this object construction function.
  2006-11-13 Setup00: BuildClass 00 checks for compiler error results incorrectly.  The fix is in Setup01.
  2006-11-12 Setup01: The TestSetup01.c hello function refers to stdout directly where out should be used.  [dh:2006-11-26 There is also a simpler way to do this in fewer output calls, as demonstrated in Setup04.]
  2006-11-10 d061003d and beyond: I wonder if I could use a shortcut that had the special check-permissions option and that has a PIF that makes it clear we are running an administrator console session.
  2006-11-10 d061003d and beyond: Another way to enter admin is to set up a console session that does it.  It would be great to elevate, or spawn an elevated session, but it is also good enough to simply have an administrative console session for most ODMA registry functions (which do not depend on current user). 
  2006-11-09 d061003d.txt: OdmVC++.bat is listed as from Setup01 0.04 instead of Setup00 0.04.  The correct version should be listed.  In all versions it should indicate where this is unchanged from in the progression of a given archive.  That way, people can tell there is nothing to deal with in restoring their own version, if any.
  2006-11-09 d061003c-d.txt: Improve the titles of the manifests.  Compare with d061003e.txt.
  2006-11-09 d061003e.txt: Correct the narrative in section 2 of the manifest and installation notes file.
  2006-11-09 d061003e.txt: Rewrite the date and sizes paths for everything in d061003e.txt
  2006-11-09 d061003d: The BuildSetup01.bat script needs to verify that TestSetup01.c is present.
  2006-11-09 Setup03 might be a better recommended successor for Setup01.  Or this might be handled in the summary of setups, which need not mention intermediate ones.  I won't change the naming, but I can skip ahead.
  2006-11-07 d061003d.txt Correct typos that are recorded on #55.87.
  2006-11-07 d061003d Setup01: Review the code and scripts for any FIXME entries that should be tracked here and elsewhere.
  2006-11-05 d061003d Setup01: Test different Platform SDK and integrated Visual Studio installs for proper location of setenv and vsvars32 scripts, etc.  Work with VS 2005 Standard Edition and also the Vista SDK when it is issued.  We probably don't want to work backwards prior to the March 2006 PSDK.
  2006-11-05 d061003c.txt should emphasize that the folder structure is designed for installation alongside the sibling trees for practical100 and odmjni100.  Also, the different setups and tests can be installed side-by-side.
  2006-11-05 d061003: There needs to be a better way to do see-alsos.
  2006-11-05 d061003c and d061003c.txt the opportunity to extract on the side of the practical100 and odmjni100 development trees has not been featured. [dh:2006-11-05 I took care of it in d061003c but not in the d061003c.txt file.]
  2006-11-05 OdmNative needs to have defensive protections against buffer over-runs in values returned from the Connection Manager and ODMA DMS implementations.  There are many values returned into unchecked char arrays, flag words, and opaque pointers (e.g., ODMHANDLE values).  It is also conceivable that a string input might be altered when it is expected to be held as a constant.
  2006-11-05 The critical scripts like OdmVC++.bat and OdmPSDK.bat need to indicate what versions they have been confirmed with.  We should make a point of trying them out on different packages and then adding the packages tested to the remarks in the scripts as well as in the respective manifest files.
  2006-11-04 d061003: When prerequisites and links are being considered, review d061003c.txt for the information there that could be simplified by appeal to external sources.  And at least make sure there are external sources for the kinds of prerequisites that are mentioned.
  2006-11-04 d061003c Setup00: Include link to the package origin/attribution in the source code of TestSetup00 (except then we have to rebuild it).  Well, consider it at some point when it needs to be recompiled for some other reason.
  2006-11-04 d061003c Setup00: After the embargo is lifted, link OdmVC++.bat to an appropriate Folio page in ODMAdev.  [dh:2006-11-04 The way to do this is to put in the final path now, even though the web link is broken until after the embargo.  This way we don't forget that stuff, and we can review it when the time comes.]
  2006-11-03 Many procedural items and descriptions of prerequisites, etc., need to be eventually moved into links where there is more detail in a consolidated place (e.g., on nfoWare).
  2006-11-03 We can use a version of Setup03 or later that takes an Application ID on the command line for checking on the access by another application.  This should be a feature of OdmRun10 too.
  2006-11-02 It looks like GetCurrentThreadId and EnumThreadWindows may be a way to find the likely only client window of the application.  We need to run some sort of test to see how that works.  It would be interesting if it locks down even a console window (#55.81).  It would also be interesting to see how that impacts console sessions that are emulated in special packages like the 4NT variants of standard console sessions, the ones that run inside of Visual Studio, etc.  [dh:2006-11-23 I have GetConsoleWindow working and I have EnumThreadWindows implemented but not tested.  Testing with 4NT variants might be useful.]
  2006-11-02 There are a number of peculiarities and exposures in ODMASAMP revealed in our inspection.  Remember to put those somewhere appropriate around matters to address in a future ODMASAMP (or ODMref10) (#55.80).
  2006-11-02 Find a way to determine a correct parent window and obtain proper modal behavior, without weirdness with the thread that is running OdmNative (#55.78,.81). [dh:2006-11-23 I am using EnumThreadWindows and also GetConsoleWindow.   I don't know yet if the EnumeThreadWindows will consistently find a winner.  GetConsoleWindow works great in console sessions, and EnumeThreadWindows does not find a console window.]
  2006-11-02 Include the option of changing the registry permissions for testing/development too, with regard to registry settings (#55.78)
  2006-11-01 A tool and guide to make it much easier for a normal user/developer to adjust the ODMA registry settings would be really valuable for these tests and later trouble-shooting (#55.78)
  2006-11-01 In TestSetup02.c, add comment about ODMHANDLE hOdmDefault and its role.
  2006-11-01 The ODMUnregisterApp call should clear the handle afterwards #55.77).
  2006-11-01 Make .reg files for setting OdmNativeTest to have ODMASAMP as the default DMS, and removing it.  This procedure needs to be documented (#55.77).  The information on how to do these scripts is at http://support.microsoft.com/default.aspx/kb/310516.  [dh:2006-11-26 This needs to be documented in the folio and also in the Guide.]
  2006-11-01 GetLastError should be used when hardening the calls on Windows API functions.  When that is used, a clearing call to SetLastError should also occur before an operation that might or might not clear it when there is no error (#55.77).
  2006-11-01 in TestSetupNN, I should add a pre-processor check to decline compilation with Unicode set (#55.77).  [dh:2006-11-04 We also need to assert Win32 and perhaps even Visual C.]
  2006-11-01 Need to include different cases in the logs of the different TestSetupNN executions (#55.77).  [dh:2006-11-04 That is, run the different variants, e.g., with and without a default DMS, with and without a Connection Manager, etc.]
  2006-11-01 Testing with different ODMA Connection Manager and on different platforms should be part of the standard drill (#55.76). 
  2006-11-01 Executing the tests on Windows 98 SE and on other than the development machines should be captured as part of the procedures and stabilization activity (#55.76)
  2006-11-01 More on prerequisites: (a) Set up a directory structure, (b) Use of Winzip and extraction of a directory structure to a place, (c) Execution of MS-DOS Prompt or Command Prompt console sessions.  Also, be operating on Windows 2000 or later.   9#55.76).  [dh:2006-11-04 See the prerequisites note under 2006-10-31.]
  2006-10-31 The LoadLibrary and FreeLibrary code in the ODMA 2.0 Connection Manager is suspect.  In particular, it presumes error feedback from LoadLibrary which is not how it is done for Win32.
  2006-10-31 The loading of DLLs is from ODMdev\manage\odma32 2.0\ and odmaent.cpp has all the entry points and logging features.  The Connection Manager logging does its work all of the time, except for actually writing the records.  There is a better way to do this by subclassing the non-logging entry points, I think, and choosing the correct version at startup.   All of the Connection Manager entries that relay through an ODMHANDLE will then be more streamlined in several respects. (The few cases that are basically static entries to the Connection Manager don't happen that much per connection, although how those have any state to consult is also an interesting questions) (#55.75)
  2006-10-31 d061003e: The example of making function-pointer types is from ODMdev/confirm/derisk02/odmgetodm.h and from examples using GetProcAddress in the PSDK Help's Windows API Reference documentation (#55.75).
  2006-10-31 d0631003d: The discriminators for the setups we are using are (1) VS80COMNTOOLS establish VS 8.0 tools, (2) VCINSTALLDIR establishes that VC++ is present, and (3) MSSdk establishes that a PSDK configuration has been established.  (#55.74)
  2006-10-31 d061003: We need to establish prerequisites: To install, to execute, to configure, to test/confirm, to make configurations, to build, to modify, and to troubleshoot. (#55.74) [dh:2006-11-04 Some of this is in the manifest for Setup00, but it is best on the cover of the devNote.]
  2006-10-27 Setup03 exercises the SelectDoc operation and we get to see what it takes to get a dialog to come up inside of an application window.  We may need to fake an application window as part of doing this.
  2006-10-27 Setup02 confirms calling the connection manager and starting to create a header file and setup for all of the Procs for entries into the ODMA Connection Manager DLL, explain why we do it this way, and the value we gain.
  2006-10-25 There is sample code and DLL creation information to review when the time comes (#55.72).
  2006-10-25 We need code to figure out the version of ODMA Connection Manager that is in hand  (#55.62).  Future Connection Managers should be able to tell us.
done 2007-08-01 Review for consistency with "Java-ODMA Integration Kit".
done 2007-01-03 Update the catalog to reflect d061003 0.05 and transfer to the hosted site.
done 0.05 2007-01-03 d061003: Update to link to the latest materials.
done 2007-01-03 d061003b: Link to d061003i
done 2007-01-03 d061003i: Customize and include links for download of license, manifest, and the code archive.
done
2006-12-31
2006-11-27 0.30alpha: When there are two or more .obj files, it is useful to start using a .lib to carry them so that odmjni100.dll builds and regression tests don't have to change as the number of interdependent .obj files increases. [dh:2007-01-03 This worked fine once I figured out that my breaking the build had nothing to do with switching to a .lib]
done 2006-12-20 Update the catalog and move all of the changes to the web site so that it can be reviewed and tested.
done 0.04 2006-12-20 d061003: Update to reflect what we have stitched into the revision progression - we'll fill in the gaps later.
done 2006-12-20 d061003b: Make d061003g the latest for now.
done 0.02 2006-12-20 d061003g: Hook to d061003h but don't change anything about the current blog. 
done 0.00 2006-12-20 Make d061003h: Hold the 0.26 version that we obtain - it goes here because all source-code changes are here.
done 2006-12-20 After customizing go rebuild odmjni100.dll and run it with the Check03 program over there.
done 2006-12-20 Check05: Make the directory and clone the Setup04 program to be the Check05 program that does an 0.26alpha regression check for us on the modified OdmNative100.obj.  This will grow as we do more.
done 0.00 2006-12-20 Check05.cpp: Customize for Check05
done 0.00 2006-12-20 BuildCheck05.bat: Customize for Check05.
done 0.21 2006-12-20 Modify OdmNative100.cpp to use an alternative hWndFound callback that remembers the first handle enumerated rather than the last.  Just grasping at straws for a short-term solution.
done 2006-11-28 d061003: Add d061003e to the list of available materials and also include those pages on the hosted site.
done
2006-11-26
2006-11-03 The license should be linked from the download section of the individual pages as well.
done 2006-11-25 d061003g: Customize for holding initial downloads of Setup04 0.25alpha escrow for OdmNative100.
done
2006-11-25
2006-11-03 Restore the AIIM Copyright notice to the Odma32api.h and the Odma32types.h files when they are populated.  Refer to the ODMA BSD license and include a copy.
done 2006-11-08 d061003e Setup02: Check out the files and set up the placeholder for the web page.
done
2006-11-07
2006-10-31 d061003d: Put in a general warning about the PSDK used and the dependencies around it.
done
2006-11-07
2006-11-05 The discussion of over-writing OdmVC++.bat and OdmPSDK.bat should consider that the SetupNN and other packages need not be installed in sequence.  So there is also action on installing an older version atop a newer one.  Zip should warn about this, but we might need to discuss it to.  We definitely should test it.
done
2006-11-07
2006-11-05 d061003c: review for consistent use of monospace fonts in mentions of the various packages, classes and other artifacts.
done
2006-11-07
2006-11-05 d061003c: Link forward to d061003d after d061003d is made the latest included by d061003b.
done
2006-11-07
2006-11-04 d061003d Setup01: Emphasize use of the PSDK Help files and documentation too.
done
2006-11-06
2006-11-04 d061003d Setup01: Change MyPSDK.bat to OdmPSDK.bat when making the same kinds of improvements made for OdmVC++.bat in Setup00.
done
2006-11-06
2006-10-30 d061003d: Point out that Windows 2000 is TARGETOS=WINNT and APPVER=5.0 (#55.73)
done
2006-11-06
2006-11-01 TestSetup01.c title comment for the MAIN section says TESTSETUP02, not 01 (#55.77).
done
2006-11-06
2006-10-30 d061003d: Reflect insistence that we are developing only on OS=Windows_NT platforms.  That is where we compile.  Our code might run on earlier systems.  But the oldest we are committed to supporting is Windows 2000.
done 2006-11-05 d061003d: Setup placeholder for description of Setup01.
done
2006-11-05
2006-10-27 d061003c: Identify how this fits with the Development Progression, what the critical step accomplishes, what part of the step is accomplished with 0.01 and what the actions are.  [dh:2006-11-04 This needs some clarification.][dh:2006-11-05 I think I have it handled between the latest folio cover and the d061003c text.]
done
2006-11-05
2006-10-24 d061003: The key idea is that these are simple Windows console applications that confirm we have the functionality working on the native Windows (OdmNative) side, and then we can adapt to development and confirmation in the odmjni100 testing and then the Java-based application. (#55.59).
done
2006-11-05
2006-10-24 d061003: One thing we are providing here is a way to confirm configuration and connection capabilities in standalone C/C++ programs.  These can be used to troubleshoot the odmjni100 functions and also a production/pilot setup with ODMJNI and a commercial DMS.  When ODMJNI doesn't seem to be working, we can use the C/C++ test programs to see if they are working or not, in isolating where the break might be. (#55.58)
done 2006-11-05 Review the d061003c package for any FIXME items that need to be surfaced at a higher level. [dh:2006-11-05 There were none.]
done 2006-11-05 d061003c: Mention that the package is designed for installation alongside the sibling practical100 and odmjni100 branches.
done 2006-11-05 d061003: Change the name to OdmNative100 everywhere in this folio and in all of the titles.
done 2006-11-05 d061003c: Correct the camel-case spelling of the .zip file link and name in the download list.
done
2006-11-05
2006-11-04 Find a way to set the web server encoding to UTF-8 for this and other manifest files (so the copyright and other symbols render via UTF-8 encoding).  [dh:2006-11-05 It looks like I need Content-Type to be content=text charset=utf-8.  I wonder if I can do this with an .htaccess at the right level without losing other global settings.  I have aded an AccCharset utf-8 .txt directive at the devNotes level.  Let's see how that works.]
done
2006-11-05
2006-11-03 d061003c: Setup00 - Put caveats in the .bat file and the overview to point out that this has only been confirmed with Visual C++ 2005 Express Edition (include product id). [dh:2006-11-05 This is done in the manifest and on the web page.  That is good enough for now.]
done
2006-11-05
2006-11-04 d061003c.txt: Add corrections noted after reviewing the file on-line (#55.84).
done
2006-11-05
2006-11-04 d061003c: Find why d061001d doesn't have the keyboard-text font shrinkage problem in paragraphs with small type, and get that change into d061003c before we cloan more pages.  [dh:2006-11-05 The lines with smaller type use <font face="Courier New, Courier, Monospace"> instead of  <code> or <kbd> elements.  (See!)]
done 2006-11-05 d061003c.txt: Add version numbers of the files listed in the manifest.
done
2006-11-05
2006-11-03 d061003c: Put in caveat about making a separate copy of MyVC++.bat OdmVC++.bat and restoring it atop the ones that are introduced by download of later OdmNative materials. [dh:2006-11-04 Here's a good reason to update d061003c.txt and also clean up its version information.]
done
2006-11-05
2006-11-04 d061003c.txt: The version number at the bottom is 0.04 and the version number of the page is actually 0.03 (and the VSS version is running way ahead of that).  This needs to be cleaned up at some point.
done
2006-11-04
2006-10-27 Provide the progression for Setup01 and explain what is involved, what the output is.   [dh:2006-11-04 This is covered in the manifest.  There can be more on the cover page later.]
done 2006-11-04 d061003c.txt Upgrade with Copyright, Creative Commons license, and attribution notice when the embargo is lifting.
done 2006-11-04 Setup00: Change the name of MyVC++ to OdmVC++ to keep separate and specific to the use in ODMJNI.
done
2006-11-04
2006-10-31 The MyVC++ script should check for vcvars.bat/cmd and whatever that portends (#55.75)
done
2006-11-04
2006-11-01 Setup00: My VC++ should check for an installation and explain it nice.  It should set a fatal exit too (#55.76)
done
2006-11-04
2006-11-03 d061003c: Move Setup00 to info\odma\OdmNative100\test\Setup00 instead of placing it at the test level.  This gives room for more tests and allows for the possibility of using SetupNN folders as Visual Studio projects as another way of building OdmNative.
done 2006-11-03 Review #55.50-81 for items to note here, items to check off, and items to move to ODMJNI project materials.
done 2006-11-02 Test what happens when a NULL (0) dwEnvData parameter is supplied.  [dh:2006-11-02 Dialog boxes go up and work properly, since they establish their own message loops.  There is no locking of the missing parent, so the dialog boxes are modal in that control doesn't return, but other ways of getting into the application remain available.  As a threading matter, we must find a way to get full modal behavior.]
done 2006-11-02 Analyze how dwEnvData is used by ODMASAMP.  [dh:2006-11-02 It is stored in HWND m_clientWind and passed to DialogBoxParm as the parent window (#55.78).]
done
2006-11-02
2006-11-01 For TestSetup03, look at nesting the output somehow so the scopes of the levels of operation are easily observed.
done 2006-11-01 Start separating Odma32api.h for the Connection Manager entry-point pointer types (#55.77).
done 2006-10-31 Move the tests (e.g., setup02, ..) down into their own folders under the test folder.  Don't have one flat set of test programs.
done
2006-10-31
2006-10-30 Setup01: After completing TestSetup00, make a MyPSDK.bat in Setup02 Setup01 for finding the Platform SDK (#55.73)
done 2006-10-30 Analyze the Microsoft Platform SDK for Windows Server 2003 R2 and locate the script, its parameters, and the environment settings it makes for creation of MyPSDK.  [dh:2006-10-30: noted at #55.73]
done
2006-10-30
2006-10-27 Make a BuildSetup00.bat that just builds TestSetup00.exe for confirming that we are compiling with VC++ and standard libraries with no difficulty.
done
2006-10-30
2006-10-25 The skeleton native connection class needs a name.  [dh:2006-10-30 I settle on OdmNative100 for the native material, especially the C++ classes and interfaces, and odmjni100 for the Java classes that access OdmNative100 via native methods.  #55.73]
done 2006-10-29 Make the file <folder>\info\odma\OdmNative\MyVC++.bat that sets the VC++ Environment variables if they are not already set.
done 2006-10-29 Use the path <folder>\info\odma\OdmNative\test for the development of the OdmNative C++ class, interface, and its tests.  Although it is not required to be part of the classpath, we make it that way so that all of the ODMJNI material is carried in one folder tree.  Note that this will be alongside <folder>\info\odma\odmjni with its implementation classes and their tests.
done 2006-10-27 Hyphenate ODMA-Access Implementation in all of the title bars.
done 2006-10-27 Make bare placeholders of a minimum folio before populating further: d061003, d061003a, d061003b, and d061003c.
done 2006-10-27 Create this folio placeholder under embargo.  The evolutionary prototyping of OdmNative will be defined and  tracked here.
Revision History:
0.06 2007-01-03-16:49 Bring current with 0.30alpha Changes
0.05 2006-12-20-18:00 Bring current with 0.26alpha Changes
0.04 2006-11-07-16:41 Complete Immediate Setup01 Items
There is enough on d061003d and the download materials for us to move on for now.
0.03 2006-11-05-19:04 Start Setup01 Items
The preparation of d061003d is started and the package will be consolidated for download and review.
0.02 2006-11-05-11:56 Correct Setup00 Materials
Add further entries and also complete corrections to d061003c and d061003c.txt noticed so far.
0.01 2006-11-04-22:32 Move Setup00 Materials
The page for Setup00 is completed and the updated material is brought over from the OdmNative development setup.
0.00 2006-10-26-19:55 Create Initial Placeholder
This diary and job jar is created to provide immediate capture of job-jar items for this folio.

Construction Zone (Hard Hat Area)
Creative Commons License You are navigating ODMdev.
This work is licensed under a
Creative Commons Attribution 2.5 License.

created 2006-10-26-19:55 -0700 (pdt) by orcmid
$$Author: Orcmid $
$$Date: 08-04-23 21:12 $
$$Revision: 88 $