将C#文件包装到DLL中

时间:2013-12-18 10:20:28

标签: c# c++ dll swig

我目前使用SWIG将我需要的一些C ++库转换为C#以使用它在C#中实现的用例,输出是一些必须包含在项目中的CS文件,并且有一个projectNameBridge .dll文件。

在我的项目中包含所有这些cs使它看起来有点乱,所以我想知道是否有办法将这些CS文件包装在DLL中,可以直接添加为包含所有这些文件的引用。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

关于DLL编译的注意事项


Visual Studio至少有三个可用的编译目标(取决于您安装的内容等):

  • x86 - x64 - anycpu

如果没有正确完成,这些互动和共同习惯会如何变得很痛苦,并且它们的行为会根据您正在使用的操作系统的位数而有所不同,因此我已经预先设置了一个小的,快速的指南来指示位数(对于缺乏一个更好的术语)导致不同设置之间的相互作用:

让我们获取3个DLL文件,所有这些文件都使用相同的代码,我们以前所准备的真正的蓝色彼得方式:

  • anycpu.dll - 已编译anycpu
  • x86.dll - 已编译x86
  • x64.dll - 已编译x64

3个可执行文件都是这样做的:从dll调用“Bitness interplay”的控制台输出。

  • anycpu.exe - 已编译anycpu
  • x86.exe - 已编译x86
  • x64.exe - 已编译x64

代码在所有情况下都是相同的,但是编译目标已经改变,并且它们工作/拒绝在32/64位OS变体中工作,如下所示:

32位操作系统

  • anycpu.exe - 执行为:32位进程DLL用法:可以加载 anycpu.dllx86.dll如果尝试BadImageFormatException会导致x64.dll 加载x86.exe
  • anycpu.dll - 执行为:32位进程DLL用法:可以加载x86.dllBadImageFormatException如果尝试加载x64.dll会导致x64.exe BadImageFormatException
  • anycpu.exe - 尝试运行时执行为:anycpu.dll

64位操作系统

  • x64.dll - 执行为:64位进程DLL用法:可以加载 BadImageFormatExceptionx86.dll如果尝试x86.exe会导致anycpu.dll 加载x86.dll
  • BadImageFormatException - 执行为:32位进程DLL用法:可以加载x64.exeanycpu.dll如果尝试加载x64.dll会导致BadImageFormatException `x64.dll
  • x86.dll - 执行为:64位进程DLL用法:可以加载anycpu 和{{1}}如果尝试加载{{1}}会导致{{1}} {{1}}

所以,除非你真的需要一定的Bitness / bitlyness(没有好听的话!)我会坚持{{1}}编译目标:它比特定目标稍微不完美但你的创作应该做不管有什么味道(这是一种更好的说法),你都会感到自豪。你碰巧正在奔跑。


重要:

我的兄弟提出了一个很好的观点:一些SDK需要特定的编译目标(ANYCPU,x84,x64等),并且使用错误的SDK会导致编译/运行时错误。


启动项目

在C#中创建DLL文件比在C ++中更简单: 首先,我们基于类库类型

创建一个新项目

Starting a dll project

在设置了您选择的相关参数并随后点击“确定”按钮后,我们就完成了,因为VS整齐地将我们带入您在上一个屏幕中指定的C#文件。

也可以添加一些代码来执行我们要求DLL能够执行的操作......

Let's go!

现在代码已经到位,您可以使用Release或Debug模式构建项目(最贴近您的需求)。

Build the DLL

导航到相关的构建文件夹..... Navigate to the relevant folder Et Voila!你的闪亮的新DLL已经可以使用了!

现在你可以在闲暇时从另一个C#项目中调用DLL:)


希望这会有所帮助,如果您需要更多信息,请告诉我们。)

答案 1 :(得分:2)

将它们放入输出类型为“类库”的单独项目中?