在C++中使用另一种语言
Using another langage in C++
我需要使用一个名为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);
}
- 文本冒险游戏 - 如何区分一种项目类型与另一种项目类型以及如何构建项目类/子类
- 为什么一种算法在相同的时间复杂度下比另一种算法更快?
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- void* 数组将元素转换为另一种类型
- 在C++中使用另一种语言
- 将 X 坐标从一种分辨率转换为另一种分辨率
- 尝试用另一种语言解密时 AES 解密错误
- 如何在另一种语言的随机函数中复制C++兰特?
- 将代码片段转换为另一种语言 不必要的 = OP
- 将C++结构写入文件并使用另一种编程语言读取文件
- 我怎样才能用另一种语言(也许C++)实现Python集
- 用另一种语言包装C++对象的策略——内存管理
- 正在创建将在另一种语言上调用的win32api(dll)
- 将一种语言嵌入到另一种语言中有什么作用?
- FormatMessage转换为另一种语言
- 演员模型:Erlang/OTP为什么特别?你能用另一种语言吗?
- 用另一种语言嵌入shell脚本
- Tesseract设置另一种语言的可变白名单