我正在尝试做一些非常简单的事情...在类中声明一个字符串,然后将其分配给类构造函数中定义的另一个字符串的值。
我正在为非托管类使用托管包装器“Unmanaged”(使用托管包装器,因为我想在C#程序中使用它,我使用的是非托管的,并且其.sln文件不在我的控制权)
如您所见,我尝试了尽可能多的字符串标题。
#pragma once
#include <string>
#include <string.h>
#include <cstring>
#include <iostream>
using namespace std;
using namespace System;
using std::string;
namespace UnmanagedWrap {
public ref class Class1
{
// TODO: Add your methods for this class here.
public:
Unmanaged *pu; //pointer to the Unmanaged class
//the constructor will allocate the pointer pu
int a;
int b;
std::string filePath; //try CString() when get back
Class1(int a_In, int b_In, std::string filePath_In) : pu(new Unmanaged()) { //constructor
a = a_In;
b = b_In;
filePath = filePath_In; //trying to assign filePath to the inputted filePath_In.......
}; //end of constructor
这给了我2个错误:
第一个涉及行std::string filePath;
1>c:\users\ngrace\documents\visual studio 2010\projects\unmanagedwrap\unmanagedwrap\UnmanagedWrap.h(21): error C4368: cannot define 'filePath' as a member of managed 'UnmanagedWrap::Class1': mixed types are not supported
第二个与行filePath = filePath_In;
1>c:\users\ngrace\documents\visual studio 2010\projects\unmanagedwrap\unmanagedwrap\UnmanagedWrap.h(25): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion)
我很遗失,因为我花了几个小时寻找答案......
我去寻求帮助的一些页面:
Including headers from an unmanaged C++ code inside C++/CLI code
(我会发布更多信息,但我需要至少10名才能这样做....)
关于我为什么会收到这些错误的任何想法?
答案 0 :(得分:1)
使用来自Bo Persson和user2666293的信息,我被引导尝试了一些东西,最终得到了答案。
您必须对托管字符串使用 System :: String ^ 类型。如果使用托管字符串并将其传递给非托管类中的方法,则必须将其转换为非托管字符串类型!
假设我们在非托管类中使用非托管字符串类型 std :: string 。
从 System :: String ^ 到 std:string 的转换必须使用以下方式完成:
#include <msclr/marshal_cppstd.h>
并在顶部的头文件引用:
min-width: auto
其中 managedString 的类型为System :: String ^
:)
答案 1 :(得分:0)
https://msdn.microsoft.com/en-us/library/hh699870.aspx在子弹2中说,如果ref classes类不公开,它们只能有标准的c ++类型。尝试使用常规类或将filePath设为私有。
编辑: 我不熟悉托管类,但您可能会尝试使用Platform :: string而不是std :: string:https://msdn.microsoft.com/en-us/library/hh755812.aspx
https://msdn.microsoft.com/en-us/library/hh699879.aspx 说当你在Windows运行时类中的方法来回传递字符串时,或者当你与其他Windows运行时组件交互时使用平台字符串