我需要使用一个名为 mailjet 的API,但这仅适用于除C ++以外的几乎所有语言( php,python,ruby,java,node.js ,ES2015,go和C# )。
因此,我想知道,因为 C#不是二进制api,但如果可以集成 C#,则它是完整的 C#代码。编码成 C ++ 一种(或列出的另一种语言)。
谢谢!
答案 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。有一个选项,请参见下面的链接。
答案 2 :(得分:0)
答案 3 :(得分:0)
在Visual Studio中,您可以使用 CLR (公共语言运行时)使用C ++项目中的C#代码。
打开项目属性。
CLR是可用于组合.Net和C ++的层。 C ++语法相同,.Net语法稍有不同。
::
代替.
作为分隔符。String^
是.Net字符串类。gcnew
而不是new
创建.Net实例。像String^ s = gcnew String();
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);
}