C♯, C#相談室 Part3 ..
634:デフォルトの名無しさん
07/12/26 02:04:57
--------正しく動くコード C#側(Form1.cs)---------
[DllImport("Hoge.dll")]
extern static void GetHogeMessage( StringBuilder name, int len );
private void Form1_Load(object sender, EventArgs e)
{
StringBuilder msg = new StringBuilder(255);
GetHogeMessage(msg, 255);
this.label1.Text = msg.ToString();
}
-------正しく動くコード CのDLL側(Hoge.dll)----------
extern "C" __declspec(dllexport) void GetCurrentName(char* msg, int length)
{
sprintf_s(msg, length, "ホゲホゲプー");
}
私のよく知る Delphiでは、string ←→ char*(PChar)間では、
コンパイル時に自動で変換コードを入れているのが、
デバッガで逆アセンブルすると、わかります。
同様に、動作を知ろうと、Reflectorで、
ILに変換したのも読んでみたのですが、コンパイラマジックなどなく、
理解にいたりませんでした。
C#は(というか、MSIL?)、内部動作的には、char* → StringBuilderでは、何をやっているのでしょうか?
私は想像では、StringBuilder.pChar のような非公開のプロパティに、char*を代入して処理しているのでは?と思っています。
そうなると、上記のエラーとなるコードでは、インスタンスを生成していないために、
強引なキャストが起き、StringBuilderとして処理はされるものの、
msg.ToString などで、エラーが起きることがある、と。
この辺の、動作に関するドキュメント等ありませんでしょうか?
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5102日前に更新/202 KB
担当:undef