![](/img/trans.png)
[英]How to Get array of string from Native Code(C++) in Managed Code(C#)
[英]How to return a string from native code to managed code in Windows Azure?
I have found this tutorial about how to interop C# code and unmanaged C++ code on Windows Azure very helpful http://msdn.microsoft.com/en-us/hh351534
但是,當我修改它時,我遇到了一些無法預料的錯誤。
我希望它返回一個字符串,而不是從非托管代碼返回和顯示一個int
,並在 C# 代碼中顯示該字符串。 所以在我的實驗中,我將 function 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,web 頁面代碼隱藏文件中,它告訴我無法更改
static extern int AddNumbers(int left, int right);
進入
static extern char *AddNumbers(int left, int right);
因為“指針只能在不安全的上下文中使用”
從那里我嘗試了很多方法,但我無法將AddNumbers()
轉換為要顯示的字符串。
所以基本上,有人可以告訴我如何修改教程以顯示字符串而不是 int。
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 文章,它更詳細地解釋了數據編組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.