gpt4 book ai didi

c# - 如何将字符串从 native 代码返回到 Windows Azure 中的托管代码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:32 25 4
gpt4 key购买 nike

我发现这个关于如何在 Windows Azure 上互操作 C# 代码和非托管 C++ 代码的教程非常有帮助 http://msdn.microsoft.com/en-us/hh351534

但是当我修改它时,我遇到了一些不可预见的错误。

我希望它返回一个字符串并在 C# 代码中显示该字符串,而不是从非托管代码返回并显示一个 int 。因此,在我的实验中,我将函数 AddNumbers() 更改为

NATIVECALCULATOR_API int AddNumbers(int left, int right){
return left+right;
}

进入

NATIVECALCULATOR_API char *AddNumbers(int left, int right){
return "a string";
}

这样当我点击 ASP.NET 页面上的按钮时,它将返回“一个字符串”。

但是,在网页代码隐藏文件default.aspx.cs中,它告诉我无法更改

static extern int AddNumbers(int left, int right);

进入

static extern char *AddNumbers(int left, int right);

因为“指针只能在不安全的上下文中使用”

从那里我尝试了很多方法,但我无法将 AddNumbers() 转换为要显示的字符串。

基本上,有人可以告诉我如何修改教程以显示字符串而不是整数。

最佳答案

C# 试图告诉您的是,它不会让您自愿使用原始指针。值得庆幸的是,我们仍然可以通过数据编码将字符串(甚至原始字符字符串)从非托管代码传递到托管代码。对于字符串,系统会将 C++ 中的 char* 转换为 C# 中的 string

对于您的具体问题,请将 default.aspx.cs 中的 AddNumbers 更改为

static extern int AddNumbers(int left, int right);

static extern string AddNumbers(int left, int right);

同样,将 C++ 代码更改为如下所示

NATIVECALCULATOR_API char* AddNumbers(int left, int right)
{
return "a string";
}

数据编码应该正确地将字符串从一个传递到另一个。

Here's the MSDN article这更详细地解释了数据编码。

关于c# - 如何将字符串从 native 代码返回到 Windows Azure 中的托管代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com