- - PR -
構造体の中でのポインタ
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-06-14 13:33
はじめまして。C#は使い始めたばかりです。
アンマネージドDLLを呼び出そうとしていますが、呼び出しパラメータとなる構造体の 中にポインタが含まれています。 C#で書く場合どのような定義になるのでしょうか。 受け渡す構造体は以下のような内容です。 struct para_info { unsigned char cno ; char reserve ; char *strbuf1 ; char *strbuf2 ; char *cbuf ; } ; 呼び出しはこんな感じです。 unsigned int WINAPI function1(struct para_info *) ; できればunsafeなコードは書きたくないのですが、お知恵をお貸しください。 |
|
投稿日時: 2005-06-14 14:39
この辺が参考になるかもしれません。
http://www2u.biglobe.ne.jp/~kaduhiko/csharp_05.html |
|
投稿日時: 2005-06-14 14:46
まずはここを読んで勉強しましょう。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconMarshalingDataWithPlatformInvoke.asp .NETのマーシャラは結構融通が利くため、複数の手段でもってアンマネージと相互運用できます。 char*とのやりとりだけでも、 stringを用いるかbyte配列を用いるかはたまたIntPtrを使うのか、 stringなら文字列はUnicodeでのやりとりかAnsiでのやるとりか、 色々考えなければなりません。 関数のパラメータにしても、ポインタを渡すのであれば out/refキーワードを使うのかIntPtrを取得して渡すのか、いっそclassで渡すものを宣言するか? 前掲のリンク先を良く読んでおおよその理屈を把握しなければ、 関数によって効率の良いコーディングをすることはできないでしょう。 |
|
投稿日時: 2005-06-14 16:01
MARUさん、Hongliangさん返信ありがとうございます。
参考になりそうです。 char*なんてマーシャリングの中でも単純なほうですね。 こんなところでつまづいているようでは先が思いやられます。 まだまだC#は勉強不足なのでがんばって勉強してみます。 ありがとうございました。 |
1