首页 / C# / C#调用C++接口返回字符串的做法
C#调用C++接口返回字符串的做法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#调用C++接口返回字符串的做法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2450字,纯文字阅读大概需要4分钟。
内容图文
现在有这样一种情景,假如C#调用C++接口需要返回一个字符串。因为字符串是不定长的,因此传递一个定长的字符串进去是不合适的。
因此需要一种间接的做法,简单来说就是C#定义一个创建空字符串的接口,传递这个接口指针给C++模块,然后在C++模块中调用这个C#接口创建一个空的字符串接口。然后在传递字符串时先调用这个C#接口创建一个空字符串,然后再填充字符串。具体的代码如何:
- #region 本段代码可放在其他位置,但保证系统启动后能初始化
- static protected StringHelper swigStringHelper = new StringHelper(); // 系统初始化时先调用
- protected class StringHelper
- {
- public delegate string StringDelegate(string message);
- static StringDelegate stringDelegate = new StringDelegate(CreateString);
- // AlgoDemo为C++模块,RegisterStringCallback为创建字符串的注册回调函数
- [DllImport("AlgoDemo", EntryPoint = "RegisterStringCallback")]
- public static extern void RegisterStringCallback(StringDelegate stringDelegate);
- static string CreateString(string cString)
- {
- return cString;
- }
- static StringHelper()
- {
- RegisterStringCallback(stringDelegate);
- }
- }
- // C#程序调用处
- private void btnExcute_Click(object sender, EventArgs e)
- {
- string strOut = "";
- string strResult = Algo.ExcuteAlgo("C#调用C++测试!", 0, ref strOut);
- MessageBox.Show(strOut);
- }
- // C++模块的注册回调函数
- typedef char * (__stdcall* StringHelperCallback)(const char *);
- static StringHelperCallback g_csharp_string_callback = NULL;
- extern "C" __declspec(dllexport) void RegisterStringCallback(StringHelperCallback callback) {
- g_csharp_string_callback = callback;
- }
- // C++接口
- char* ExcuteAlgo(const char* strFileName,int arg0,char** strOut)
- {
- char* result;
- TestAlgo algo;
- std::string strInput(strFileName);
- std::string strResult = algo.DoSomething(strFileName,arg0);
- // 此处需要注意,由调用方开辟空间
- result = "中文测试!!";
- std::string strTemp = "输出字符串测试。。。";
- for(int i=0;i<500;i++)
- {
- strTemp += "多加一点数据...!!";
- }
- if(NULL==g_csharp_string_callback)
- return NULL;
- // 把C++字符串传递给空的C#字符串
- *strOut = g_csharp_string_callback(strTemp.c_str());
- return result;
- }
内容总结
以上是互联网集市为您收集整理的C#调用C++接口返回字符串的做法全部内容,希望文章能够帮你解决C#调用C++接口返回字符串的做法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。