C#调用本地动态链接库时,根据x86或x64自动选择相应的动态链接库dll文件

利用c#开发的程序在调用dll文件时,可以根据系统类型选择正确的dll动态链接库。如下所示,可以创建两个DLLImport外部函数(分别对应32位版本和64位版本),然后创建一个包装方法,在包装方法中根据系统类型选择正确版本的方法。

        //32bit

       [DllImport("ASR\\ASR32.dll",EntryPoint = "startRec")]

       public static extern int StartRec32Bit();

 

       //64bit

       [DllImport("ASR\\ASR64.dll",EntryPoint = "startRec")]

       public static extern int StartRec64Bit();

 

       //wrapper包装,在这个方法中根据操作系统是32位还是64位来选择正确的方法

       public static int StartRec()

       {

            bool is64bit = System.Environment.Is64BitOperatingSystem;

            if(is64bit)

            {

                return StartRec64Bit();              

            }

            else

            {

                return StartRec32Bit();

           }

       }


当c#项目和DLL项目位于同一个解决方案中时,为了能够在编译dll项目时将生成的dll文件同时拷贝到c#的调试项目目录中,可以利用后期生成事件来实现。在后期生成事件的命令行中输入文件复制的脚本,假如c#项目名称为Alter,需要将dll复制到Alter下的Debug\ASR\目录中,则可以采用如下命令:


if /i %PROCESSOR_IDENTIFIER:~0,3%==x86  (copy "$(SolutionDir)Debug\ASR.dll" "$(SolutionDir)Alter\bin\Debug\ASR\ASR32.dll") else  (copy "$(SolutionDir)Debug\ASR.dll" "$(SolutionDir)AlterName\bin\Debug\ASR\ASR64.dll")


该命令首先判断系统版本是不是x86的,如果是,则拷贝后的文件为ASR32.dll,如果不是,则拷贝后的文件未ASR64.dll。这样,源程序无论在64位下还是32位下均可以编译运行。

猜你喜欢

转载自blog.csdn.net/jiuzaizuotian2014/article/details/78288265
今日推荐