gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:41:31 26 4
gpt4 key购买 nike

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

我的代码很简单:

cpp_file.h:

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

int times2(int arg);
};

cpp_file.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 接口(interface)文件是:

cpp_file.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 个 Unresolved external 问题
  2. 错误 LNK2001:无法解析的外部符号 _times2

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

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

最佳答案

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

  1. 创建一个包含两个项目的解决方案:
    • C# 控制台应用程序
    • C++ Win32 控制台应用程序(名称=cpp、DLL、空项目)。如果您选择不同的名称,请不要在您的项目中使用类的名称并更新 .i 文件 %module名称匹配。
  2. 在 C# 项目中创建一个名为 Generated 的文件夹。
  3. 将您的 .cpp、.h 和 .i 文件添加到 DLL,并进行以下修改。
    • 请注意,必须导出整个类。替换 <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. 选择 cpp_file.i , Properties, General, Item Type 作为Custom Build Tool
  2. 选择应用创建自定义构建工具属性组。
  3. 在自定义构建工具、常规、命令行中输入:
    swig -csharp -c++ -outdir GeneratedFolderPath cpp_file.i
  4. 在输出中,输入 cpp_file_wrap.cxx,然后单击确定关闭对话框。
  5. 右键单击 cpp_file.i和编译。这应该创建四个文件:三个在 C# Generated 文件夹中,一个在 C++ 项目中。
  6. 在 C++ 项目中创建一个 Generated Files 过滤器,并向其中添加 cpp_file_wrap.cxx
  7. 将三个 Generated 文件添加到 C# 项目的 Generated 文件夹。
  8. 右键单击 C# 项目并将 C++ 项目添加为依赖项。
  9. 在 C# 项目的 Properties 的 Build 选项卡中,将 Output Path 从 bin\Debug 更改为至 ..\Debug或者 C++ 项目输出目录的相对路径是什么。 .exe 和 .dll 需要在同一目录中。
  10. 在 C# 项目的 Main 中,添加行:
    var cpp = new cpp_file();
    Console.WriteLine(cpp.times2(5));
  11. 构建解决方案。
  12. 运行 C# 项目。

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

关于c++ - 如何在 Visual Studio 2010 中构建这个简单的 C++/SWIG/C# 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com