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

Using another langage in C++

本文关键字:另一种 语言 C++      更新时间:2023-10-16

我需要使用一个名为mailjet的API,但该API仅适用于除C++之外的几乎所有语言(php、python、ruby、java、node.js、ES2015、go和C#(
所以我想知道,由于C#不是一个二进制api,但它是完整的C#代码,是否可以将C#++中(或其他列出的语言(
谢谢!

Mailjet提供了一个标准的JSON/HTTP(S(Web API,可用于任何提供HTTP和JSON支持的语言(通过使用库或自己编码这些协议或格式(。您提到的语言只是Mailjet提供的包装器所使用的语言。C++将允许您使用API,使用C#包装器并从C++调用它将是非常低效的。只要使用一个支持HTTP和JSON的C++库,你就可以了。使用这些代码根据Mailjet规范对API调用进行编码,例如使用正确的HTTP头和JSON主体格式构建HTTP请求并调用API。有很多这样的C++库可用,任何一个像样的都可以。

你可以做到。从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

尝试编写小python脚本并使用python交互式shell运行它。

python -i -u

Qt5很简单。只需复制答案中的代码

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

打开项目属性

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

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

  • 添加.Net项目或DLL作为CLR项目的引用
  • .Net命名空间分隔符-使用::而不是.作为分隔符
  • .Net类必须用^声明,以表示.Net引用。例如String^是.Net String类
  • 使用gcnew来创建.Net实例,而不是使用new。如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));
}  

非常感谢您的回答。这是我在C++中使用libcurl得到的解决方案
首先,您必须在此处安装libcurl(很棒的教程: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);
}