gpt4 book ai didi

c# - 如何在 C# 应用程序中使用 C++/CLI

转载 作者:可可西里 更新时间:2023-11-01 08:09:50 24 4
gpt4 key购买 nike

我正在尝试从我的 C# 应用程序(通过 C++/CLI)调用我的 C++ 库。我按照 this question 中的示例进行操作(针对我的具体应用)。我的应用程序的设置是:

  • 项目 1:C++ 项目(我将其编译为 DLL)
  • 项目 2:C++ 项目(我的 CLR 包装器;只是上面示例的头文件;引用项目 1)
  • 项目 3:C# 项目(引用项目 2)

不幸的是,当我实际去访问我的 C# 应用程序中的 CLR 包装器对象时,我收到以下错误:

The type or namespace name 'YourClass' could not be found (are you missing a using directive or an assembly reference?)

是我的项目设置不正确,还是我应该调查其他问题? (不幸的是,由于专有原因,我无法发布代码,但它是一段非常简单的代码,很容易遵循上面的示例。)

更新:

所以我完全按照 Chris 所说的做了(见下面的回答),但我仍然收到来 self 的 C# 应用程序的消息“找不到类型或命名空间名称‘MyProgram’(你是否缺少 using 指令还是程序集引用?)。这是我的代码的(模型)。

  • 项目 1 - 这是我的 C++ 应用程序。它编译/工作。我在别处用过。 (我从这个构建中得到了一个 DLL。)
  • Project2 - 这是我的包装器代码。

MyWrapper.h

#pragma once

#include "myorigapp.h"

using namespace System;

namespace MyProgram
{
public ref class MyWrapper
{
private:
myorigapp* NativePtr;

public:
MyWrapper()
{
NativePtr = new myorigapp();
}

~MyWrapper()
{
delete NativePtr;
NativePtr = NULL;
}

void dostuff()
{
NativePtr->dostuff();
}
}
}
  • Project3 - 这是我的 C# 应用程序。

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using MyProgram;

namespace Testing
{
class Program
{
static void Main(string[] args)
{
MyWrapper p = new MyWrapper();
p.dostuff();
}
}
}

Project3 引用 Project2,而 Project2 引用 Project1。一切都没有错误地构建(除了我在上面的 using MyProgram 行的 C# 代码中描述的错误)。

最佳答案

仅包含来自纯 C++ 应用程序的 header 还不够好。您需要在 Project2 中用托管对象包装非托管对象(即 public ref class YourClassDotNet)

#include "YourHeader.h"

namespace MyManagedWrapper
{
public ref class YourClassDotNet
{
private:
YourClass* ptr;

public:
YourClassDotNet()
{
ptr = new YourClass();
}

~YourClassDotNet()
{
this->!YourClassDotNet();
}

!YourClassDotNet()
{
delete ptr;
ptr = NULL;
}

void SomeMethod()
{
ptr->SomeMethod();
}
}
}

关于c# - 如何在 C# 应用程序中使用 C++/CLI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655936/

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