将字符串参数传递给外部方法作为char *

时间:2016-06-08 17:26:29

标签: c# c++ windows-runtime

我正在创建Windows运行时组件(c ++),以便稍后在Windows Phone 8.1应用程序(c#)中使用它。我的问题很简单,但我找不到任何答案:

我需要创建一个方法,它将string / char * /任何文件路径作为参数传递给外部方法,该方法将char *作为参数。

我尝试过使用std :: string,String ^,char *。但我仍然会得到错误,例如不支持这种类型(不是在String ^ case中)或其他一些类型。

是否有一些简单的答案告诉我该怎么做?

错误的代码示例

开始

#include "pch.h"
#include "Class1.h"

using namespace Platform;

namespace WindowsRuntimeComponent2
{
    public ref class Class1 sealed
    {

各种类型:

int Foo(std::string param) {

原因:Foo': signature of public member contains native type 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' WindowsRuntimeComponent2还有一些包含有关字符串依赖关系的相同信息

int Foo(char * param) {

原因:'Foo': signature of public member contains native type 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' WindowsRuntimeComponent2

int Foo(String^ photoPath) {

这个不会导致任何错误,但我不知道如何解析它到我的char *

1 个答案:

答案 0 :(得分:0)

基本上你只需要知道如何从System.String^转换为std::string,这可以在C ++ / CLI模式下完成,如下所示:

#include <msclr\marshal_cppstd.h>

//...

int Foo(String^ photoPath) {
    std::string unmanaged_photoPath = msclr::interop::marshal_as<std::string>(photoPath);
    // then convert to c-style string as normal using unmanaged_photoPath.c_str();
    return 0;
}