在Extern&#34; C&#34;中将List <string ^>返回给Vector <std :: string>的正确方法

时间:2017-05-16 22:52:50

标签: c# c++ command-line-interface

我在CLI和I之间进行通信需要从我的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,在我的ServiceClientHook上使用cli

目前,当我尝试从&#39; Plugin.h返回一个向量时, C链接函数无法返回C ++类&#39; std :: vector&gt;&#39;

1 个答案:

答案 0 :(得分:0)

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

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

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

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