5.ClrSDKExample介绍


 

                    OpenRoadsDesignerCONNECTSDK的安装目录下有示例文件夹examples,其中包含ManagedSDKExampleUnmanagedSDKExampleClrSDKExample三个文件夹。这三个文件夹分别是C#C++C++/CLI编写的例子。ClrSDKExample例子使用托管C++,示例了怎么样利用SDKAnnotation进行二次开发。

         文件夹中ClrSDKExample.cppClrSDKExample.h是动态库的入口文件,它的作用就是在dll加载的时候(MainAddin::Run),运行MyAnnotationProvider::GetInstance().Initialize();对我们的Provider进行实例化,此方法一旦运行,我们自定义的所有Annotation Definition机制都会被加载到ORD系统中。

 

         ClrSDKExample.mkeClrSDKExample.mki是我们的编译配置文件,当以管理员权限启动OpenRoadsDesignerDeveloperShell.bat以后。我们把当前路径切换到ClrSDKExample目录下,运行bmake  ClrSDKExample就可以编译整个ClrSDKExample项目。

        

 

          ClrSDKExample.mkeUnmanagedSDKExample.mke的最大不同就是在编译相应源文件的时候我们需要调用%include compileForCLRStart.mki%include compileForCLRStop.mki两个MKI文件。

         MKI文件中有链接lib库的设置,这与在UnmanagedSDKExample.mke是类似的。如下图所示:

        但是在托管C++中还有些不同,我们这个例子在预编译头文件Stdafx.h中进行了#using的设置,这与在托管(C#)项目中的Reference *.dll的作用类似。如下图所示:

                 通过以上设置,托管C++项目就可以调用托管dll的接口了。

 

          UserAnnotation.cppUserAnnotation.h文件中定义了MyAnnotationProviderMyAnnotationCLRMyAnnotationEvaluatorMyAnnotationEnabler等结构。这些结构实现了在我们ORD软件中自定义Annotation Definition的功能。各个具体功能我们已在前面基本原理进行介绍了。