gpt4 book ai didi

c# - 将 List 从 C++ 传递到 C#

转载 作者:太空狗 更新时间:2023-10-29 22:16:20 25 4
gpt4 key购买 nike

没有使用 C++ 的经验,所以在这里请求一些帮助。我得到的是一个 .net dll,我正在编写一个包装器,以便以后可以在 c++ 和 vb6 项目中使用 .net dll。

到目前为止我的代码:

我要调用的c#类:

public class App
{
public App(int programKey, List<string> filePaths)
{
//Do something
}
}

我的 C++ 项目:

static int m_programKey;
static vector<std::string> m_fileNames;

void __stdcall TicketReportAPI::TrStart(int iProgramKey)
{
m_programKey = iProgramKey;
};

void __stdcall TicketReportAPI::TrAddFile(const char* cFileName)
{
string filename(cFileName);
m_fileNames.push_back(filename);
}


void __stdcall TicketReportAPI::TrOpenDialog()
{

if(m_fileNames.size()> 0)
{

List<String^> list = gcnew List<String^>();

for(int index = 0; index < m_fileNames.size(); index++)
{

std::string Model(m_fileNames[index]);
String^ sharpString = gcnew String(Model.c_str());

list.Add(gcnew String(sharpString));
}


App^ app = gcnew App(m_programKey, list);

}
else
App^ app = gcnew App(m_programKey);

}

如果我尝试编译 C++ 项目,我会收到以下错误:

App(int,System::Collections::Generic::List ^)':从'System::Collections::Generic::List'到'System::Collections::Generic::List'的转换^'不可能

是否可以将托管列表从 c++ 传递到 .net c#?如果没有,你们建议我将字符串数组传递给我的 C# 程序集?

感谢您的帮助,在此先致谢。

最佳答案

您缺少一个 ^ .

List<String^>^ list = gcnew List<String^>();
^-- right here

您还需要切换 list.Addlist->Add .

您正在使用 gcnew ,这是在托管堆上创建内容的方式,生成的类型是托管句柄,^ .这大致相当于使用 new在非托管堆上创建一个对象,结果类型是一个指针,* .

声明类型为 List<String^> 的局部变量(没有 ^ )是有效的 C++/CLI:它使局部变量使用堆栈语义。没有与该变量类型等效的 C#,因此大多数 .Net 库不能完全使用它:例如,没有复制构造函数来处理没有 ^ 的变量赋值。 .所有托管 API 都期望参数的类型具有 ^ ,所以大多数时候,您会希望将其用于局部变量。

重要说明:此答案中的所有内容都适用于 .Net 中的引用类型(在 C# 中声明为 class ,或在 C++/CLI 中声明为 ref classref struct )。它不适用于值类型(C# struct、C++/CLI value classvalue struct)。值类型(例如 intfloatDateTime 等)始终在没有 ^ 的情况下声明和传递.

关于c# - 将 List<String^> 从 C++ 传递到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17046193/

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