我正在创建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 *
。
答案 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;
}