我目前使用SWIG将我需要的一些C ++库转换为C#以使用它在C#中实现的用例,输出是一些必须包含在项目中的CS文件,并且有一个projectNameBridge .dll文件。
在我的项目中包含所有这些cs使它看起来有点乱,所以我想知道是否有办法将这些CS文件包装在DLL中,可以直接添加为包含所有这些文件的引用。
有什么建议吗?
答案 0 :(得分:3)
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变体中工作,如下所示:
anycpu.exe
- 执行为:32位进程DLL用法:可以加载
anycpu.dll
和x86.dll
如果尝试BadImageFormatException
会导致x64.dll
加载x86.exe
anycpu.dll
- 执行为:32位进程DLL用法:可以加载x86.dll
和BadImageFormatException
如果尝试加载x64.dll
会导致x64.exe
BadImageFormatException
anycpu.exe
- 尝试运行时执行为:anycpu.dll
x64.dll
- 执行为:64位进程DLL用法:可以加载
BadImageFormatException
和x86.dll
如果尝试x86.exe
会导致anycpu.dll
加载x86.dll
BadImageFormatException
- 执行为:32位进程DLL用法:可以加载x64.exe
和anycpu.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 ++中更简单: 首先,我们基于类库类型
创建一个新项目
在设置了您选择的相关参数并随后点击“确定”按钮后,我们就完成了,因为VS整齐地将我们带入您在上一个屏幕中指定的C#文件。
也可以添加一些代码来执行我们要求DLL能够执行的操作......
现在代码已经到位,您可以使用Release或Debug模式构建项目(最贴近您的需求)。
导航到相关的构建文件夹..... Et Voila!你的闪亮的新DLL已经可以使用了!
现在你可以在闲暇时从另一个C#项目中调用DLL:)
希望这会有所帮助,如果您需要更多信息,请告诉我们。)
答案 1 :(得分:2)
将它们放入输出类型为“类库”的单独项目中?