从dll传递c字符串,穿过外部C
Passing C string back from DLL across Extern C
在单个程序中全部编译时,下面的玩具程序可以正常工作,但是如果getMessageFromNetwork
移至DLL中,它将起作用?
我在使用/创建dll方面非常糟糕,我的主要恐惧是我在周围的不良记忆中引用。
#include "string.h"
#include <string>
#include <iostream>
void getMessageFromNetwork(char* buffer, size_t bufferSize);
int main(int argc, char** argv)
{
char errorMessage[500];
getMessageFromNetwork(errorMessage, sizeof(errorMessage));
std::string outString(errorMessage);
std::cout << outString;
return 0;
}
void getMessageFromNetwork(char* buffer, size_t bufferSize)
{
const std::string errorMessageFromNetwork = "0123456789 this is a string from the network of uncertain length and termination";
std::string localMessage = errorMessageFromNetwork;
localMessage.resize(bufferSize);
localMessage[bufferSize - 1] = ' ';
strcpy(buffer, localMessage.c_str());
}
我在Stackoverflow上找到的唯一类似的问题是
c字符串通过dll边界
我不认为我犯了两个答复中警告的任何错误,但我不确定。
编辑
我担心工作的高级工程师的主要原因建议将缓冲区传递到功能的正确方法是:
getMessageFromNetwork(char** buffer, size_t bufferSize)
然后称其为
char errorMessage[500]
getMessageFromNetwork((char**)&errorMessage, sizeof(errorMessage))
我在办公室时在星期五完全无法工作几个小时。
您的原始功能绝对可以,不要对您的大学建议混淆。
相关文章:
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- 匹配外部单引号之间的字符串
- 字符串文本不能有外部链接的原因是什么?
- 放置在外部 DLL 中的类中的字符串数据的内存损坏
- 如何调用 GetAltMonthNames 来填充外部区域设置月份字符串的安全数组
- 从dll传递c字符串,穿过外部C
- 如何将 Wifi.localIP() 转换为字符串并将其存储到外部变量
- 如何在Qt小部件应用程序中翻译外部文件中的字符串?
- Adobe 字符串内存泄漏 - 在哪里调用外部库入口点以释放内存?
- 拆分C++字符串(使用 strtok?),由逗号分隔,不使用外部库
- 如何在LLVM Pass中将字符串传递给外部函数
- 外部字符串调用导致32位的Segfault,以64位工作
- 外部常量字符串的链接错误
- 增加二维字符串向量中外部向量的大小
- 从外部文件中读取字符串行并转换为十六进制
- 在没有外部库的情况下将 utf-16 文本文件正确读取到字符串中
- C++ - 使用 stringstream 对象从外部 txt 文件中的句子中读取字符串和整数
- C++字符串在if语句外部消失
- 将以null结尾的字符串列表从外部函数返回到.NET中
- c++外部字符串数组不可见