跨越Extern C从DLL传回C字符串

时间:2018-02-18 14:54:26

标签: c++ string dll

下面的玩具程序在单个程序中编译时会起作用,但如果将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] = '\0';
  strcpy(buffer, localMessage.c_str());
}

我在stackoverflow上可以找到的唯一类似问题是

C string through dll boundaries

我并没有认为我犯了两个回复中被警告的任何错误,但我不确定。

修改

我担心的主要原因是一位非常高级的工程师建议将缓冲区传递给函数的正确方法是:

getMessageFromNetwork(char** buffer, size_t bufferSize)

然后将其称为

char errorMessage[500]
getMessageFromNetwork((char**)&errorMessage, sizeof(errorMessage))
当我在办公室的时候,我周五完全无法上班几个小时。

1 个答案:

答案 0 :(得分:0)

您的原始功能绝对正常,不要被您的同事建议所困惑。