利用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位下均可以编译运行。