- - PR -
VB.netからCへ渡す構造体
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-13 18:57
お世話になっております
VB.NET2003 WindowsPG で DllImport を 使用して Cで作成されたDllに C側の構造体に値を渡したいのですが どなたか ご経験ありませんでしょうか 試したこと integer long string を単項目ずつ渡す方法では 想定通りに値が渡ります VB.NET にて CALL部分 Dim sts As sPOINT With sts .lA = 1000 .lB = 200 End With Dim RetVal As Long RetVal = KesanT(sts) DLLImport部分 <DllImport("TestPG.dll", EntryPoint:="testD", SetLastError:=True, _ CharSet:=CharSet.Unicode, ExactSpelling:=True, _ CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function _ KesanT(ByRef r As sPOINT) As Long ' This function copies a file from the path src to the path dst. End Function 構造体定義部分 Structure sPOINT Public lA As Long Public lB As Long End Structure C 計算部分 long __stdcall testD(PJKESAN_RESULT pjkr) { long d; d = pjkr->lA + pjkr->lB; return d; } c 構造体 typedef struct tagJKESAN_RESULT { long lA; long lB; } JKESANRESULT, *PJKESAN_RESULT; VBと通信する構造体のバイトアライメントは4バイト 結果が 必ず0になります ご教授の程 よろしくお願い致します | ||||||||
|
投稿日時: 2007-04-13 19:20
C の long は一般に 32bits/4bytes ですよ。
さて、VB.NET の Long は何バイトの値でしょう? | ||||||||
|
投稿日時: 2007-04-13 19:29
すみません Long を Int32 に変えてみました が 結果同じで・・・・ 安直? | ||||||||
|
投稿日時: 2007-04-13 20:07
StructLayoutAtributeを指定する必要があるのではなくて? VC++のデフォルトのアライメントはDDWORDなんだけど大丈夫? | ||||||||
|
投稿日時: 2007-04-13 20:21
ありがとうございます Vも+もつかない C なんです | ||||||||
|
投稿日時: 2007-04-13 20:34
えーと、ちょっと話が見えませんが… Vも+もつかないCで、Windows用のDLLを作成している、ということ? いやまあ、それはそれで華麗にスルーしてみるとしても、反応すべき場所 はそこではないはず。
StrutLayout 属性というものがあって、それを指定することで構造体の 配置方法を指定することができるわけです。通常は .NET が使いやすい ようにしちゃってるんだけど、DLL と通信するなら DLL の流儀にあわせな いといけない。それを指定するのが StructLayout 属性ですよと。 検索したらこんなのが出てきました。参考になるといいですけど。 http://www.atmarkit.co.jp/fdotnet/dotnettips/026w32struct/w32struct.html # でも本当はこういう「検索」ぐらいは自分でやらなきゃいけないですけどね。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2007-04-13 21:05
ありがとうございます まさしく ご指定のHPにて 今回のソースを作ってます | ||||||||
|
投稿日時: 2007-04-13 21:08
ありゃ、そうだったんですか。 その割には StructLayout 属性の指定がないみたいですが… つけてやってみました? _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 |