将 SWIG 包装的 C++ .dll 集成到 C# 项目中
Integrate C++ .dll wrapped by SWIG to C# project
我在VS2019下有2个解决方案:RLibrary(包含C++项目)和VTApp(包含C#项目)。
解决方案 RLibrary 有两个项目:RLib C++ .dll 和 SwigW(包装项目).
SwigW 生成了以下文件:RLibCSHARP_wrap.cxx、RLib.cs、RLib.i 和 RLibPINVOKE.cs.
在 RLibPINVOKE.cs 我有这样的行:
class RLibPINVOKE {
//...
static RLibPINVOKE() {
}
[global::System.Runtime.InteropServices.DllImport("SwigW", EntryPoint="CSharp_new_Create")]
public static extern global::System.IntPtr new_Create();
[global::System.Runtime.InteropServices.DllImport("SwigW", EntryPoint="CSharp_new_Request")]
public static extern global::System.IntPtr new_Request();
// ...
}
因此,在构建 RLibrary 解决方案后,我将有两个 .dll(也是 .lib)文件:RLib.dll 和SwigW.dll。
我想使用 VTApp 中的 new_Create()
、new_Request()
函数。
VTApp 还有两个项目:UI 和 Core。 UI 引用了 Core。我通过右键单击->添加->现有项目[=将RLibPINVOKE.cs文件添加到核心项目56=] 并尝试在 命名空间 UI 中使用 UI 项目中的上述函数,即
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Input;
using Core;
using Newtonsoft.Json;
namespace UI {
public partial class MainWindow {
private void Execute_Req(object sender, EREventArgs e)
{
//...
IntPtr p = new_Create();
}
}
}
不幸的是,我收到 CS01013:名称 'new_Create' 在当前上下文中不存在。 错误。
在我看来,即使没有将 SwigW.dll 添加到 Core 项目中,我也不应该出现这种编译时错误。那么,这里的问题是什么?如果需要添加SwigW.dll如何正确添加到Core项目中?另外,我是否也应该将 RLib.dll 添加到 Core 中?
尝试RLibPINVOKE.new_Create()
。该方法在 class RLibPINVOKE
中
class RLibPINVOKE {
//...
您可能需要 using
,但 Visual Studio 应该可以在 RLibPINVOKE
.
上向您推荐
我在VS2019下有2个解决方案:RLibrary(包含C++项目)和VTApp(包含C#项目)。
解决方案 RLibrary 有两个项目:RLib C++ .dll 和 SwigW(包装项目). SwigW 生成了以下文件:RLibCSHARP_wrap.cxx、RLib.cs、RLib.i 和 RLibPINVOKE.cs.
在 RLibPINVOKE.cs 我有这样的行:
class RLibPINVOKE {
//...
static RLibPINVOKE() {
}
[global::System.Runtime.InteropServices.DllImport("SwigW", EntryPoint="CSharp_new_Create")]
public static extern global::System.IntPtr new_Create();
[global::System.Runtime.InteropServices.DllImport("SwigW", EntryPoint="CSharp_new_Request")]
public static extern global::System.IntPtr new_Request();
// ...
}
因此,在构建 RLibrary 解决方案后,我将有两个 .dll(也是 .lib)文件:RLib.dll 和SwigW.dll。
我想使用 VTApp 中的 new_Create()
、new_Request()
函数。
VTApp 还有两个项目:UI 和 Core。 UI 引用了 Core。我通过右键单击->添加->现有项目[=将RLibPINVOKE.cs文件添加到核心项目56=] 并尝试在 命名空间 UI 中使用 UI 项目中的上述函数,即
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Input;
using Core;
using Newtonsoft.Json;
namespace UI {
public partial class MainWindow {
private void Execute_Req(object sender, EREventArgs e)
{
//...
IntPtr p = new_Create();
}
}
}
不幸的是,我收到 CS01013:名称 'new_Create' 在当前上下文中不存在。 错误。 在我看来,即使没有将 SwigW.dll 添加到 Core 项目中,我也不应该出现这种编译时错误。那么,这里的问题是什么?如果需要添加SwigW.dll如何正确添加到Core项目中?另外,我是否也应该将 RLib.dll 添加到 Core 中?
尝试RLibPINVOKE.new_Create()
。该方法在 class RLibPINVOKE
class RLibPINVOKE {
//...
您可能需要 using
,但 Visual Studio 应该可以在 RLibPINVOKE
.