C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: PtrToStructureでNULL?になる・・・


(過去ログ 78 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■46142 / inTopicNo.1)  PtrToStructureでNULL?になる・・・
  
□投稿者/ ぴーちゃん (1回)-(2010/01/27(Wed) 07:01:16)

分類:[VB.NET/VB2005 以降] 

はじめまして
環境は以下の通りです。
VISTA
Visual Basic 2008 Express Edition

PtrToStructureで戻り値がNULLになってしまうのですが、
原因が解りません・・・
コピーする値をVisual C++ 2008 Express Editionで作ったDLLから受けとります。
アンマネージドコードからマネージドコードにコピーする際の制約などありますか?

構造体は次のようになっています。

C側
typedef struct{
	int	m_len;
	char	m_message[256];
}MESSAGE;

VB側
    <StructLayout(LayoutKind.Explicit, Size:=260, CharSet:=CharSet.Ansi)> _
    Structure MESSAGE
        <FieldOffset(0)> Dim m_len As Integer
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _
        <FieldOffset(4)> Dim m_message As String
    End Structure


C側
	msg.m_len = strlen(p);
	memcpy(msg.m_message,p,strlen(p));
	memcpy(p_msg,&msg,sizeof(MESSAGE));

VB側
msg = CType((Marshal.PtrToStructure(nAddress, GetType(MESSAGE))), MESSAGE)

ダンプしてみたのですが、NULLでした・・・

引用返信 編集キー/
■46149 / inTopicNo.2)  Re[1]: PtrToStructureでNULL?になる・・・
□投稿者/ ぴーちゃん (2回)-(2010/01/27(Wed) 09:53:42)
No46142 (ぴーちゃん さん) に返信
どうもありがとうございます
解決しました

原因はCreateFileMappingを使って、共有メモリに書き込んでいるのですが、
VB側で、OpenFileMappingしたところ、その戻り値がNULLでした・・・
C側で、CloseHandledeでハンドルを解放していたのが原因だったようです。
試しにコメントアウトしてみたところ、受け取ることができました。

CloseHandleのタイミングってアプリの終了時にやるものなのでしょうか?

解決済み
引用返信 編集キー/
■46156 / inTopicNo.3)  Re[2]: PtrToStructureでNULL?になる・・・
□投稿者/ とっちゃん (454回)-(2010/01/27(Wed) 12:07:06)
とっちゃん さんの Web サイト
No46149 (ぴーちゃん さん) に返信
> 原因はCreateFileMappingを使って、共有メモリに書き込んでいるのですが、
> VB側で、OpenFileMappingしたところ、その戻り値がNULLでした・・・
> C側で、CloseHandledeでハンドルを解放していたのが原因だったようです。
> 試しにコメントアウトしてみたところ、受け取ることができました。
>
> CloseHandleのタイミングってアプリの終了時にやるものなのでしょうか?
>
続けるなら、別スレ立てたほうがよいかな?
PtrToStructure とは全く関係ない部分が問題なんですよね?

#回答じゃないので解決済みは継続
解決済み
引用返信 編集キー/
■46162 / inTopicNo.4)  Re[3]: PtrToStructureでNULL?になる・・・
□投稿者/ ぴーちゃん (3回)-(2010/01/27(Wed) 13:01:11)
No46156 (とっちゃん さん) に返信
> ■No46149 (ぴーちゃん さん) に返信
>>原因はCreateFileMappingを使って、共有メモリに書き込んでいるのですが、
>>VB側で、OpenFileMappingしたところ、その戻り値がNULLでした・・・
>>C側で、CloseHandledeでハンドルを解放していたのが原因だったようです。
>>試しにコメントアウトしてみたところ、受け取ることができました。
>>
>>CloseHandleのタイミングってアプリの終了時にやるものなのでしょうか?
>>
> 続けるなら、別スレ立てたほうがよいかな?
> PtrToStructure とは全く関係ない部分が問題なんですよね?
>
> #回答じゃないので解決済みは継続

すみません。そうですね。
では、”CreateFileMappingした場合のCloseHandleのタイミング”というスレッドを立てさせて頂きます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -