当前位置: 首页 > 面试题库 >

如何从Visual Studio 2010使用SWIG创建DLL

姚子石
2023-03-14
问题内容

我一直在尝试使用Microsoft Visual Studio
2010来用SWIG为我创建一个DLL。如果您已经完成了此过程,那么您是否愿意提供周到的逐步过程说明?我在网上到处都看了很多,花了很多时间来做。但是我发现的所有教程都已过时或无法正确解释。

我已经与cygwin一起成功完成了此过程;但是正如您所知,cygwin DLL不太实用。

结果,我知道可以一起创建DLL的.i,.cpp和.h文件。我只需要知道如何在Visual Studio C ++
2010中执行此操作即可。我的目标语言是Python。

请不要把我引到另一个站点;因为很有可能我已经去过那里并尝试过。另外,请不要发表nar昧的评论,因为在不久的将来使我的工作变得非常重要。

衷心感谢您的事先帮助!


问题答案:

分步说明。这假定您具有源,并且正在构建一个将源直接链接到其中的DLL扩展。创建一个工作项目后,我没有再经历过,所以我可能错过了一些东西。如果您踩在某个步骤上,请对此帖子发表评论。如果您已有一个DLL,并且想创建一个包装它的Python扩展DLL,则此步骤会稍有不同。如果您需要有关此帖子的评论的帮助,我将进行扩展。

编辑8/19/2012 :如果从C示例开始,请不要-c++++在步骤13中使用,.c.cxx在步骤14和19中将用作包装文件扩展名。

  1. 启动Visual Studio 2010
  2. 现有代码中的文件,新建,项目…
  3. 选择“ Visual C ++”项目类型,然后单击“下一步”。
  4. 输入项目文件的位置,即.cpp / .h / .i文件所在的位置。
  5. 对于“项目名称”,选择.i文件中的%module语句中使用的名称(区分大小写)。
  6. 选择项目类型“动态链接库(DLL)项目”,然后单击“下一步”。
  7. 将包括到Python.h文件路径的路径添加到“包含”搜索路径,通常类似于“ C:\ Python27 \ include”,然后单击“下一步”。
  8. 单击完成。
  9. 右键单击“解决方案资源管理器”中的“项目”,然后单击“添加”,“现有项…”,然后选择您的.i文件。
  10. 右键单击.i文件,属性,然后选择配置“所有配置”。
  11. 将项目类型更改为“自定义构建工具”,然后单击“应用”。
  12. 在“属性”中选择“自定义构建工具”(它将在上面的“应用”之后显示)。
  13. 输入“ swig -c ++ -python -outdir $(Outdir)%(Identity)”的命令行(这假定SWIG在您的路径中,并根据需要将生成的.py文件重定向到Debug或Release目录)。
  14. 在输出中输入“%(Filename)_wrap.cxx; $(Outdir)%(Filename).py”。
  15. 单击确定。
  16. 右键单击.i文件,然后选择“编译”。
  17. 右键单击项目,添加,新建过滤器,将其命名为“ Generated Files”。
  18. 右键单击“生成的文件”,单击“属性”,然后将“ SCC文件”设置为“ False”(如果使用源代码管理,这将阻止VS2010尝试在此过滤器中检入生成的文件)。
  19. 右键单击“ Generated Files”,然后单击“添加”,“退出项目”,然后选择由编译生成的_wrap.cxx文件。
  20. 右键单击项目“属性”。
  21. 选择配置“所有配置”。
  22. 选择“配置属性”,“链接器”,“常规”,“其他库目录”,然后将路径添加到python库,通常为“ C:\ Python27 \ libs”。
  23. 选择“配置属性”,“常规”,然后将TargetName设置为“ _ $(ProjectName)”。
  24. 将目标扩展名设置为“ .pyd”。
  25. 生成项目的“发行”版本。除非您构建Python本身的调试版本,否则您无法构建Debug版本。
  26. 打开控制台,转到项目的Release目录,运行python,导入模块,然后调用函数!


 类似资料:
  • 问题内容: 我有用swig包装的类的C 代码。我无法修改代码或包装。在python中,我具有使用ctypes的指向所述C 类实例的指针。如何围绕该指针创建一个Swig包装器? 我知道swig对象拥有一个’this’属性,该属性在内部指向包装的对象,但是我找不到一种将其设置为我手头的指针的方法。 谢谢您的帮助! 问题答案: 您 可以 执行此操作,但是这需要大量工作,并且解决使ctypes或SWIG接

  • 我有一个库。它是通过SWIG进行包装的。我想创建一个插件来扩展它。插件需要一个来自已经包装的库的类来运行具有类似的东西。库从Java和c#中使用。现在这个插件也将从那里使用。库和插件是分开的dll的。如何高SWIG,我已经有那个类型在创建插件绑定时进行包装?

  • 问题内容: 我在C 中有一个方法,该方法将双精度数组作为参数。我从Java调用此方法,需要传递一个双精度数组。C 例程读取和修改数组的值,而我需要Java中的那些更新后的值。我该怎么做呢? 例如,使用C ++例程: 和Java代码: 我猜不能像上面的调用那样对myMethod进行调用…还是可以吗?而在Swig中进行这项工作所需的是什么。如果我无法进行上述调用,如何将我的值获取到C ++代码? 问题

  • 问题内容: 我是TestNG和Selenium Webdriver的新手,并尝试使用eclipse创建testng.xml。 在www上进行了一些研究,并了解可以通过右键单击Java类>> TestNG >>转换为TestNG来创建此文件。 但是,此转换重构向导未打开。 如果Java类已经包含@Test批注(!?),则此向导是否将无法打开 您能帮我使用eclipse创建testng.xml吗? (

  • 我想从CUDA代码()创建一个. dll,以便从外部C程序中使用这个库。经过一些尝试,我只是在. cu文件中留下了一个简单的C函数。代码如下: kernel.cu 内核.h 我首先尝试使用生成一个对象,然后使用创建DLL,如下所示: 它工作正常,并生成。为了测试DLL文件,我编写了一个简单的程序: 编译方式: 结果是执行开始时的内存访问错误。 然而如果我重新命名。cu文件在。C(因为它只是C代码)

  • 我在使用文本文件创建SQLite数据库时遇到了问题。我应该创建一个成员列表,其中包含以下内容:(成员)号、名字、姓氏、地址和电话号码(如果有的话)。我正在使用方法创建db,但我似乎无法让它正常工作。 文本文件是这样填充的('...'应该意味着列表中还有其他文件): 正如你可能看到的,一些成员没有电话号码,我认为这是导致db无法填充的原因。我之所以相信这一点,是因为我试图用所有信息制作自己的列表,这