从dll传递c字符串,穿过外部C

Passing C string back from DLL across Extern C

本文关键字:外部 字符串 dll 传递      更新时间:2023-10-16

在单个程序中全部编译时,下面的玩具程序可以正常工作,但是如果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))

我在办公室时在星期五完全无法工作几个小时。

您的原始功能绝对可以,不要对您的大学建议混淆。