如何在Windows Azure中从本机代码返回字符串到托管代码
How to return a string from native code to managed code in Windows Azure?
我发现这个关于如何在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的文章,更详细地解释了数据编组。
相关文章:
- 在nodejs中使用本机代码的最佳方法是什么?
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- 可以从本机代码(如C++/Delphi)中使用.netCore DLL
- 使用 x86_64-w64-mingw32-g++ 编译 JNI C++本机代码
- 终止调用本机代码的 .Net 线程
- 从本机代码返回到托管代码会损坏返回的对象
- 我能否通过 JNI 调试在本机代码中创建的 JVM?
- Android 无法从本机代码调用 Java 方法 JNI
- 将自定义 Java 数据模型传递给我的本机代码
- 用于 JUnit 测试的本机代码未使用 'nar-maven-plugin' 编译
- 将本机C 代码转换为Java
- 有什么方法可以用本机C 代码替换Windows API计时器(settimer)
- 使用 Android Studio 使用本机代码编译 apk 时,如何在链接处删除 libgnustl_static.
- 如何在 Linux 上调试本机代码时自动附加到多个子进程
- 如何将 WebAssembly 编译成常规汇编/本机代码(或 Cpp 等)
- Android- AAR库的调试本机代码
- 附加到 C++/CLI dll 的性能探查器无法访问本机C++代码
- AccessViolationException从托管C (ASP.NET的包装器)调用本机C 代码
- 从本机代码返回"const char*"并在java中获取"字符串"
- 如何在Windows Azure中从本机代码返回字符串到托管代码