无法在C#中调用C ++方法

时间:2014-07-22 11:02:12

标签: c# c++

在我的C#项目中,我必须包含一个C ++库。

我的C ++库中有两个方法如下:

APICLIENT_API std::map<std::string, std::string> logInWithParams(const char* url, const char* loginID, const char* password, const char* salt, const char* timeStamp, const char* refererURL, int iterations);


static APICLIENT_API int logIn(int iterations);

我可以使用C#中的以下实现访问 logIn 方法:

 [DllImport(@"F:\MySp\MySp\bin\APIClient.dll", EntryPoint = "?logIn@CAPIClient@API@@SAHH@Z", CallingConvention = CallingConvention.Cdecl)]

public static extern int logIn(int g);

但无法以任何方式调用 logInWithParams 方法。以下是我的尝试。

 [DllImport(@"F:\MySp\MySp\bin\APIClient.dll", EntryPoint = "?logInWithParams@CAPIClient@API@@SA?AV?$map@V@Z", CallingConvention = CallingConvention.Cdecl)]
        public static extern System.Collections.Generic.Dictionary<string, string> logInWithParams([MarshalAs(UnmanagedType.LPStr)]string a, [MarshalAs(UnmanagedType.LPStr)]string b, [MarshalAs(UnmanagedType.LPStr)]string c, [MarshalAs(UnmanagedType.LPStr)]string d, [MarshalAs(UnmanagedType.LPStr)]string e, [MarshalAs(UnmanagedType.LPStr)]string f, int g);

C#Implementaion:

 System.Collections.Generic.Dictionary<string, string> strMe = new Dictionary<string, string>();
                    strMe = APICaller.logInWithParams("https://api.net/api/0.1/session/login", "james@Golmaal.com", "123123", "", "1403762225", "https://api.mini.net/", 4096);

错误:无法封送“返回值”:无法封送通用类型。

我没有编写C ++代码,我只需要将它包含在我的C#项目中。 我是C#中集成C ++库的新手。请帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

封送程序不会自动将C ++ STL类型转换为.NET类型。 您可以创建一个托管C ++项目,您可以在该项目中访问该功能并在那里手动进行转换。 See this example on MSDN.