首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将c字符串返回给C#程序

将c字符串返回给C#程序
EN

Stack Overflow用户
提问于 2011-12-07 09:58:26
回答 1查看 1.2K关注 0票数 2

我有一个C++ dll,它有一个返回c字符串的函数,我有一个C#程序,它调用这个函数并将数据返回到C#字符串。这就是我的意思

代码语言:javascript
复制
__declspec(dllexport) const char* function (const char* str) {
        std::string stdString( str );
        std::cout << stdString.c_str() << std::endl; // this prints fine, no data loss
        return stdString.c_str();
}

下面是C#代码

代码语言:javascript
复制
  [DllImport("MyDLL.dll")]
  public static extern string function(string data);

  string blah = function("blah");
  Console.WriteLine(blah); // doesn't print anything... 

当我查看本地变量时,它显示变量'blah‘等于’‘。

数据发生了什么变化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-07 10:03:54

您的C++代码已损坏。您将返回一个指向局部变量的指针。在函数返回后,它将不再存在。在C++程序中,这往往是偶然的,但却是很强的未定义行为。它不可能在互操作场景中工作,pinvoke封送拆收器对堆栈的使用将覆盖字符串。

一个可以工作的声明:

代码语言:javascript
复制
 void function (const char* str, char* output, size_t outputLength)

在DllImport声明中使用StringBuilder作为输出参数,并传递一个具有足够容量的初始化参数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8409499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档