- PR -

構造体の中でのポインタ

1
投稿者投稿内容
とっちゃん
会議室デビュー日: 2005/06/13
投稿数: 8
投稿日時: 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なコードは書きたくないのですが、お知恵をお貸しください。


MARU
常連さん
会議室デビュー日: 2005/02/16
投稿数: 35
投稿日時: 2005-06-14 14:39
この辺が参考になるかもしれません。
http://www2u.biglobe.ne.jp/~kaduhiko/csharp_05.html
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 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/13
投稿数: 8
投稿日時: 2005-06-14 16:01
MARUさん、Hongliangさん返信ありがとうございます。

参考になりそうです。
char*なんてマーシャリングの中でも単純なほうですね。
こんなところでつまづいているようでは先が思いやられます。

まだまだC#は勉強不足なのでがんばって勉強してみます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)