在C ++中使用另一种语言

时间:2018-07-30 09:47:02

标签: c# c++ mailjet

我需要使用一个名为 mailjet 的API,但这仅适用于除C ++以外的几乎所有语言( php,python,ruby,java,node.js ,ES2015,go和C# )。
因此,我想知道,因为 C#不是二进制api,但如果可以集成 C#,则它是完整的 C#代码。编码成 C ++ 一种(或列出的另一种语言)。
谢谢!

5 个答案:

答案 0 :(得分:2)

Mailjet提供了标准的JSON / HTTP(S)Web API,可用于提供HTTP和JSON支持的任何语言(以本机方式,通过使用库或通过自己编码这些协议或格式)。您提到的语言仅仅是Mailjet提供包装程序的语言。 C ++可以让您很好地使用该API,使用C#包装器并从C ++调用它将非常低效。只需使用一个支持HTTP的C ++库和一个支持JSON的库就可以了。使用这些来根据Mailjet规范对API调用进行编码,例如使用正确的HTTP标头和JSON主体格式构建HTTP请求,然后调用API。这些C ++库很多,任何一个不错的库都可以。

答案 1 :(得分:0)

您可以做到。从您的C#代码创建DLL文件,然后从C ++代码调用api。有一个选项,请参见下面的链接。

https://support.microsoft.com/en-gb/help/828736/how-to-call-a-managed-dll-from-native-visual-c-code-in-visual-studio-n

答案 2 :(得分:0)

尝试编写小的python脚本,然后使用Python interactive shell运行它。

python -i -u

使用Qt5很容易。只需从该答案中复制code

答案 3 :(得分:0)

在Visual Studio中,您可以使用 CLR 公共语言运行时)使用C ++项目中的C#代码。

打开项目属性

  • 配置管理器-> 常规下进入左树视图。
  • 项目默认下的“右”网格中,找到公共语言运行时支持
  • 如果它是标准C ++项目,则默认值为:无公共语言运行时支持,您应将其更改为:公共语言运行时支持(/ clr)
  • 在VS17中,您还应该将配置属性-> C / C ++ -> 语言 一致性模式更改为

CLR是可用于组合.Net和C ++的层。 C ++语法相同,.Net语法稍有不同。

  • 添加.Net项目或DLL作为对CLR项目的引用。
  • .Net命名空间分隔符-使用::代替.作为分隔符。
  • .Net类必须使用^声明以指示.Net参考。例如String^是.Net字符串类。
  • 使用gcnew而不是new创建.Net实例。像String^ s = gcnew String();
  • 需要将字符串从c ++“转换”为.Net,然后再返回。

混合代码的简短示例:

using namespace System;  
using namespace System::Runtime::InteropServices;  

#include <iostream>
using namespace std;

int main() {  
   String ^ str = gcnew String("Abcde");  

   Console::WriteLine(str);  //use .Net to print to screen.

   //extract c string from .Net String
   char *p = (char*)Marshal::StringToHGlobalAnsi(str).ToPointer();  

   cout<<p<<endl;  // use C++ to print to screen

   //free the extracted pointer.
   Marshal::FreeHGlobal(IntPtr(p));

}  

答案 4 :(得分:0)

非常感谢您的回答。这是我在C ++中使用libcurl的解决方案。
首先,您必须安装libcurl(此处为 great 教程:https://stackoverflow.com/a/30290407)。
然后,在安装libcurl之后,您将必须以这种方式使用它(当然还要自定义它):

#include <curl/curl.h>
#include <string>
int main(int argc, char **argv)
{
    CURL *curl = NULL;
    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();
    string message(R"({"Messages":[{"From":{"Email":"THE SENDER MAIL","Name":"Me"},"To":[{"Email":"THE RECEIVER EMAIL","Name":"TheName"}],"Subject":"TheSubject","TextPart":"TEST MAIL"}]})"); // "R" before the string is supposed to allow special characters like "\"

    curl_easy_setopt(curl, CURLOPT_URL, "https://api.mailjet.com/v3.1/send");
    //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
    curl_easy_setopt(curl, CURLOPT_USERNAME, "YOUR API USERNAME");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "YOUR API PASSWORD");
    curl_easy_setopt(curl, CURLOPT_HEADER, "Content-Type: application/json");
    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, my_strlen(message)); // my_strlen is a personnal strlen, does the same as message.length()
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, message.c_str());
    curl_easy_perform(curl);
    curl_easy_cleanup(curl);
}