簡體   English   中英

如何將字符串從本機代碼返回到 Windows Azure 中的托管代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM