如何在 Visual Studio 2010 中构建这个简单的 C++/SWIG/C# 项目?

2023-12-31

我需要帮助设置一个简单的 C++/C# SWIG 项目。我很难将使用 SWIG 绑定的 C++ 项目组合在一起。我正在使用 Visual Studio 2010 和最新版本的 SWIG。

我的代码很简单:

cpp_文件.h:

#pragma once
class cpp_file
{
public:
    cpp_file(void);
    ~cpp_file(void);

    int times2(int arg);
};

cpp_文件.cpp

#include "cpp_file.h"
cpp_file::cpp_file(void)
{
}
cpp_file::~cpp_file(void)
{
}
int cpp_file::times2(int arg)
{
return arg * 2;
}

我的 SWIG 接口文件是:

cpp_文件.i

/* cpp_file.i */
%module cpp_file
%{
/* Put header files here or function declarations like below */
extern int times2(int arg);
%}
extern int times2(int arg);

我可以很好地编译这个项目。然后,我运行 SWIG 命令来生成包装器:

swig -csharp "C:/pathToFile/cpp_file.i"

我现在不知道该怎么办。我找不到任何解释 Visual Studio 2010 中操作的教程或文档。

当我将 SWIG 生成的 *cpp_file_wrap.c* 文件添加到我的 Visual Studio 2010 项目并尝试构建该项目时,我收到两个链接器错误。

  1. 错误 LNK1120:1 个未解析的外部
  2. 错误LNK2001:无法解析的外部符号_times2

第一条错误消息指向我的 dll 文件。第二个错误指​​向某个目标文件 (*.obj)。在我的项目中找不到错误消息提到“_times2”的符号。

我该如何推进我的简单项目?是否有一些教程或一些文档可以逐步解释此过程?我找不到任何涉及 C++ with SWIG、C#、Visual Studio 2010 和 .Net v4.0 的内容。


在 VS2010 IDE 中完全构建的分步说明:

  1. Create a solution with two projects:
    • C# 控制台应用程序
    • C++ Win32 控制台应用程序(名称=cpp、DLL、空项目)。如果您选择不同的名称,请不要在项目中使用类的名称并更新.i file %module要匹配的名称。
  2. 在 C# 项目中创建一个文件夹,名为生成.
  3. Add your .cpp, .h, and .i file to the DLL with the modifications below.
    • 请注意,必须导出整个类。代替<project>与项目的名称。将会有一个预处理器定义<project>_EXPORTS已为您的 DLL 项目定义(请参阅项目、属性、C++、预处理器)。
    • 模块名称不能与模块中的类名称匹配。
    • %include <windows.i>帮助 SWIG 理解某些“窗口主义”,例如__declspec.

cpp_文件.h

#pragma once

#ifdef <project>_EXPORTS
#define <project>_API __declspec(dllexport)
#else
#define <project>_API __declspec(dllimport)
#endif

class <project>_API cpp_file
{
public:
    cpp_file(void);
    ~cpp_file(void);

    int times2(int arg);
};

cpp_文件.i

%module cpp

%{
#include "cpp_file.h"
%}

%include <windows.i>
%include "cpp_file.h"
  1. Select cpp_file.i、属性、常规、项目类型为自定义构建工具.
  2. Select Apply创建自定义构建工具属性组。
  3. 在“自定义构建工具”、“常规”、“命令行”中输入:
    痛饮-csharp-c++-outdir生成的文件夹路径cpp_文件.i
  4. 在输出中,输入cpp_file_wrap.cxx,然后单击“确定”关闭对话框。
  5. 右键点击cpp_file.i并编译。这将创建四个文件:三个位于 C# 生成文件夹中,一个位于 C++ 项目中。
  6. 创建一个生成的文件在C++项目中过滤并添加cpp_file_wrap.cxx to it.
  7. 将三个生成文件添加到 C# 项目的生成文件夹中。
  8. 右键单击 C# 项目并将 C++ 项目添加为依赖项。
  9. 在 C# 项目的“属性”、“构建”选项卡中,将“输出路径”从bin\Debug to ..\Debug或者 C++ 项目输出目录的相对路径是什么。 .exe 和 .dll 需要位于同一目录中。
  10. 在 C# 项目中Main,添加以下行:
    var cpp = new cpp_file();
    Console.WriteLine(cpp.times2(5));
  11. 构建解决方案。
  12. 运行 C# 项目。

祝你好运!如果你让它工作,请告诉我。我可以对任何不清楚的地方进行扩展。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Visual Studio 2010 中构建这个简单的 C++/SWIG/C# 项目? 的相关文章

  • 在哪里使用 EF6 订阅 ObjectMaterialized?

    我正在尝试将我的上下文订阅到以下 OnjectMaterialized 事件this https stackoverflow com a 3756842 2835713 像这样 IObjectContextAdapter this Obje
  • 在列表中查找匹配项的最简洁方法

    在列表中查找内容的最佳方式是什么 我知道 LINQ 有一些不错的技巧 但我们也可以获取有关 C 2 0 的建议 让我们对这个常见的代码模式进行最佳重构 目前我使用这样的代码 mObjList is a List
  • 在 C++ 中,当我将值传递给函数时,它是否总是转换为适当的类型?

    如果我有一个像这样的函数void func size t x 我称该函数为func 5 5 立即转换为size t类型 这通常适用于所有类型吗 我问这个问题是因为我发誓我见过人们编写代码 他们做类似的事情func 5 0 将 5 作为双精度
  • 无法在表适配器配置属性中找到对象“Web.config”的连接“MyConnName”

    I want to change the query in table adapter but it s not opening throwing an error Configure table Adapter Failed in pro
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • 演示如何在 C# 4.0 中使用新的“dynamic”关键字

    这是 4 0 版本中新的 C 未来 称为动态 告诉我如何在我的代码中使用它以及这个未来可以如何帮助我 相关问题 新的 dynamic C 4 0 关键字是否弃用了 var 关键字 https stackoverflow com questi
  • 如何(可移植地)在 C 和 C++ 中获取 DBL_EPSILON

    我正在 Linux AS 3 上使用 GCC 3 4 并试图找出DBL EPSILON 或者至少是一个不错的近似值 我怎样才能以编程方式获取它 在 C 中是std numeric limits
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki
  • memccpy 返回比 src 起始地址更低的内存地址

    我有一个学校项目 我必须重新编码memccpy 功能 我使用 2 个程序来检查我的代码是否正常工作 第一个是只有一个主程序的小程序 第二个程序是另一个学生开发的 可以找到here https github com yyang42 mouli
  • 二维数组的列求和

    我有一个IEnumerable
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 使用 C# 和 .NET Core 在 AWS Cognito 用户池中进行用户管理

    如何使用 C 和 NET Core 3 x 管理 AWS Cognito 用户池中的用户 在文档中找不到有关它的任何内容 Attilio Gelosa 的原创文章 我写这篇文章是希望对其他人有帮助 我必须阅读一页又一页的文档 并从 AWS
  • 如何将对 System.Data.DataSetExtensions 的引用添加到网站 ascx.cs 文件?

    我们正在处理一个网站项目并尝试参考System Data DataSetExtensions 使用 Web 应用程序会更好 不过 技术主管有她的理由 这是我们尝试过的 找到装配路径 打开 Visual Studio 命令提示符并运行sn e
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • 如何在 C 预处理器中可靠地检测 Mac OS X、iOS、Linux、Windows? [复制]

    这个问题在这里已经有答案了 如果有一些跨平台 C C 代码需要在 Mac OS X iOS Linux Windows 上编译 我如何在预处理器过程中可靠地检测到它们 大多数编译器都使用预定义的宏 您可以找到列表here http sour
  • 更改成员资格、角色等的默认连接字符串

    默认情况下 我的网络应用程序似乎正在使用LocalSqlServer作为用于任何应用程序服务 例如成员资格 角色 身份验证 等 的连接字符串 有什么方法可以更改默认连接字符串应该是什么 默认值是 LocalSqlServer 似乎很随意 我
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一

随机推荐

  • 从 TypeScript 扩展数组

    我在下面的代码中做错了什么 我正在尝试延长Array在我的课堂上MyNumberList然后尝试使用它 我看到的是 似乎没有任何项目被添加到列表中 我得到一个undefined当我尝试访问列表元素时 P S 我正在使用 TypeScript
  • 使用单独的数据库进行 papertrail 版本控制

    我正在尝试使用 papertrail 将模型的更改事件记录在单独的数据库中 我在用着 导轨 4 1 2 Ruby 2 1 纸迹 4 0 0 下面是我在关注点中添加的代码 module Foo class Base lt ActiveReco
  • 在 Pyspark 中将列类型从字符串更改为日期

    我正在尝试将列类型从字符串更改为日期 我咨询过以下人士的答案 如何将 DataFrame 中的列类型从字符串更改为日期 https stackoverflow com questions 36948012 how to change the
  • 删除了配置门户中的团队配置配置文件:*,该怎么办?

    我不小心删除了配置门户中的团队配置配置文件 我现在应该做什么 我有一台安装了 Xcode 4 2 的 MacBook 我还在 熟悉 iOS 配置门户和 Xcode 的过程中删除了 iOS 团队配置配置文件 我没有成功地恢复它 无论是从 Xc
  • 如何使用 TestCafe 和 Yaml 将屏幕截图和视频保存为 Azure Build Pipeline 中的附件?

    我正在尝试在 Azure Devops 中创建一个构建管道 运行在 TestCafe Studio 中创建的测试 保存错误屏幕截图 并保存每次测试的视频 保存测试运行的视频 将测试结果发布到测试运行 将屏幕截图和视频作为附件发布到构建管道和
  • 在经典 ASP 脚本中使用 ADO.NET

    我正在编写一些返回单个值的简单查询 并且我想从经典 ASP 的 ADO 库中获取 ADO NET ExecuteScalar 方法的行为 但是 我不想重新发明轮子 是否可以在经典 ASP 中实例化 ADO NET 的 Command 对象
  • 码头工人。 MySQL 图像。无法更改 my.cnf 文件

    我有这样一个docker compose yml database container name test db image mysql 5 7 volumes docker my cnf etc my cnf environment MY
  • 如何检测 NSString 是否包含特定字符?

    我有一个 NSString 对象 例如 45 0000 现在我想知道这个字符串是否包含 我怎样才能做到这一点 您是否想查找它是否至少包含以下一项 or 您可以使用 rangeOfCharacterFromSet NSCharacterSet
  • 复制没有历史记录的 git 存储库

    我在 GitHub 上有一个私人存储库 我想将其公开 但是 一些初始提交包含我不想公开的信息 硬编码凭据等 在不包含部分或全部提交历史记录的情况下 公开最新提交 我真的不需要或不希望公共存储库中的先前提交 的最简单方法是什么 您可以限制历史
  • 如何在Web应用程序中使复选框只读

    我有一个网格视图 每一行都有一个复选框 当进入编辑模式时 可以选中 取消选中复选框 但我不希望该复选框在任何其他模式下都是可编辑的 用户可能很容易对不反映保存回数据库中的真实值的复选框感到困惑
  • 使用for循环批量重命名文件

    我正在尝试使用 for 循环来重命名文件 Echo Off setlocal enableDelayedExpansion Set Date set mydate DATE 10 4 DATE 4 2 DATE 7 2 Rename fil
  • 拆分逗号分隔的字符串并在 C# 中添加引号 - 优雅的解决方案

    我有一个string看起来像这样 var v 10 14 18 21 并想将其用作如下所示的东西 10 14 18 21 我写了一个函数 它将值分割为comma并将它们作为字符串添加在一起 另外我删除了最后一个 从结果字符串 我把所有东西都
  • DQL 返回实体数组而不是对象

    通常 如果我运行如下所示的 DQL 查询 它将返回实体对象列表 d this gt getDoctrine gt getRepository xxxWebsiteBundle Locations gt createQueryBuilder
  • 为什么用户可以设置新密码,而无需输入与我的批处理代码正确的旧密码?

    我最近写了一个文件夹锁定程序 我唯一的问题是当我需要更改密码时 例如我去部分newpass 该程序似乎不会将旧密码与新密码进行比较 而只是使用给定的任何输入 这违背了拥有密码的目的 因为每个人都可以更改密码 而不是用它解锁文件夹 有人可以仔
  • 在 Chrome 中重新加载动画 GIF 时出现问题

    我有一个可以重新加载 gif 动画的应用程序 它在 Safari 中始终有效 但在 Chrome 中时断时续 我相信这个问题与提到的问题类似here https groups google com forum topic shiny dis
  • Excel - 基于ID的工作表值查找[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有两张工作表 第一个列出了我的客户
  • 如何获取处理器和硬盘的制造序列号和 ID?

    如何使用 Matlab 获取以下硬件属性 主板制造序列号 处理器 ID 处理器制造序列号 硬盘ID 硬盘制造序列号 是否有任何函数或类负责检测其他机器硬件组件属性的属性 我知道可以使用系统或控制台命令来完成 但我不知道如何完成 不过 我更喜
  • 将 1 亿个文件写入 s3

    我的主要目标是根据每条记录的 id 将记录拆分为文件 目前有超过 150 亿条记录 而且肯定还会增加 我需要一个使用 Amazon EMR 的可扩展解决方案 我已经为一个包含大约 9 亿条记录的较小数据集完成了这项工作 输入文件采用 csv
  • Gensim LDA 中的主题明智文档分布

    python 有没有办法映射属于某个主题的文档 例如 主要是 主题 0 的文档列表 我知道有多种方法可以列出每个文档的主题 但我该如何反过来呢 Edit 我正在使用以下 LDA 脚本 doc set for file in files ne
  • 如何在 Visual Studio 2010 中构建这个简单的 C++/SWIG/C# 项目?

    我需要帮助设置一个简单的 C C SWIG 项目 我很难将使用 SWIG 绑定的 C 项目组合在一起 我正在使用 Visual Studio 2010 和最新版本的 SWIG 我的代码很简单 cpp 文件 h pragma once cla