在 Extern "C" 中将 List<String^> 返回到 Vector<std::string> 的正确方法?

Proper way to return a List<String^> to a Vector<std::string> in Extern "C"?

本文关键字:lt gt string Extern 方法 std String 中将 List 返回 Vector      更新时间:2023-10-16

我在 CLI 之间进行通信,我需要从我的 C 函数返回一个字符串向量。我没有在 c++/c# 之间做太多 cli,所以请告诉我是否有更好的方法来实现这一目标。

//Plugin.cpp
void PluginMain(){
  ServiceClientHook();
}
//Plugin.h;
extern "C" {
  vector<std::string> ServiceClientHook();
}
//ServiceClientHook.h
#include "Plugin.h"
//ServiceClientHook.cpp
string ServiceClientHook()
{
    return "Foobar";
}

如何处理 ServiceClientHook((?我应该补充一点,我在我的插件上使用非 cli,在我的服务客户端钩子上使用 cli

目前,当我尝试从"Plugin.h"返回向量时:C 链接函数无法返回C++类"std::vector>

听起来您在同一个 C++/CLI DLL 项目中有两个函数:

  • PluginMain -- 与非托管 EXE 对话,也许是C++,也许不是
  • ServiceClientHook -- 与 C# DLL 对话

你根本不需要做任何特别的事情来让这些互相交谈。 摆脱ServiceClientHook()上的extern "C",它就会起作用。 即使ServiceClientHook()在使用/clr的文件中,PluginMain也是普通C++。

现在,PluginMain可能需要extern "C"__declspec(dllexport)来帮助 EXE 找到它。 但这些要求不适用于它使用的功能。