如何在Windows Azure中从本机代码返回字符串到托管代码
本文关键字:返回 本机代码 字符串 托管代码 Windows Azure | 更新日期: 2023-09-27 18:05:54
我发现这个关于如何在Windows Azure上互操作c#代码和非托管c++代码的教程非常有帮助http://msdn.microsoft.com/en-us/hh351534
然而,当我修改它时,我遇到了一些不可预见的错误。
不是从非托管代码返回和显示int
,我希望它返回一个字符串并在c#代码中显示该字符串。在我的实验中,我将函数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";
}
数据编组应该正确地将字符串从一个传递到另一个。
这里是MSDN的文章,更详细地解释了数据编组。