If you are looking at developing tablet applications (and before you ask - yes you should be...) then there is a little trap that you should be aware of.
If you want to make use of the Ink Analysis API and you are developing on a 64-bit machine then make sure you set the target CPU to x86. The Ink Analysis assemblies only support 32-bit at this time.
If you forget to do this then when you build or debug the project on an 64-bit machine then you will get an error like this:
System.BadImageFormatException was unhandled
Message=" is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)"
Source="IACore"
StackTrace:
at System.Windows.Ink.AnalysisCore.RecognitionEngine..ctor(AnalysisWarningBaseCollection warnings)
at System.Windows.Ink.AnalysisCore.RecognitionStage..ctor(AnalysisWarningBaseCollection warnings)
at System.Windows.Ink.AnalysisCore.InkAnalyzerBase.CreateParserAndRegisterForEvents(Boolean reco)
at System.Windows.Ink.AnalysisCore.InkAnalyzerBase.ForegroundAnalyzeInternal(ForegroundProcessingRecord record, AnalysisRegionBase dirty, AnalysisRegionBase originalDirtyRegion, Int32[] dirtyStrokesToAnalyze, AnalysisRegionBase dirtyRegionFromStrokesToAnalyze, AnalysisRegionBase regionOfRemovedStrokes)
at System.Windows.Ink.AnalysisCore.InkAnalyzerBase.Analyze()
at Microsoft.Ink.InkAnalyzer.Analyze()
at InkBlogger.Form1.Button1_Click(Object sender, EventArgs e) in C:\Users\Craig Pringle\Documents\Visual Studio 2005\Projects\InkBlogger\InkBlogger\Form1.vb:line 21
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
at InkBlogger.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Which is not all that helpful...
To correct this you just need to set the target CPU in your project properties to x86. To do this...
- right click you project in project explorer and select properties
- click on the Compile tab
- click on the Advanced Compile Options... button
- Set the target CPU as shown below.
What am I developing, you ask? Time will tell 