2011-08-17 6 views
2

は、私はそれを変更する場合しかし、私はいくつかの予期せぬエラーに遭遇しWindows Azureでネイティブコードからマネージコードに文字列を戻す方法は?

http://msdn.microsoft.com/en-us/hh351534非常に役立つのWindows Azureの上でC#のコードとアンマネージC++コードを相互運用する方法については、このチュートリアルを発見しました。

アンマネージコードからintを返して表示する代わりに、C#コードでその文字列を表示する文字列を返すことをお勧めします。私は、ASP.NETページ上のボタンを打ったとき、それは「文字列」を返すようにだから私の実験では、私が

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

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

から機能AddNumbers()を変更しました。

しかし、default.aspx.csで、Webページの分離コードファイルが、それは私に語った私は

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

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

へのポインタのみで使用することができる」ために変更することはできません。安全でないコンテキスト "

そこから私は多くの方法を試しましたが、AddNumbers()を表示する文字列に変換できません。

だから、基本的に誰かがチュートリアルを変更してintの代わりに文字列を表示する方法を教えてもらえますか?

答えて

1

C#があなたに伝えようとしているのは、生のポインタを喜んで使うことができないということです。ありがたいことに、管理されていないコードからData Marshallingを介してマネージコードに文字列(生の文字列さえも)を引き渡すことができます。文字列の場合、システムはC++のchar*をC#のstringに変換します。あなたの具体的な質問については

、そう

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

のように読み取るためにC++コードを変更し、同様に

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

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

からdefault.aspx.csにAddNumbersを変更データ整理正しくpする必要があります文字列を一方から他方に変換します。

Here's the MSDN articleでは、(MUCH)のデータマーシャリングについて詳しく説明しています。

関連する問題