原因判明
原因が判明致しました
GlobalAllocする際のサイズをリクエスト内容の文字数で取っていました
バイト数に変更するときちんと返すようになりました
…恥ずかしい話です
所長さん、お手数をおかけしました
で、ちょっとそのプログラムを載せてみます
!変数宣言は必要
#uFlagsに指定する定数
!GMEM_FIXED = 0;
!GMEM_MOVEABLE = 2;#使わない
!GMEM_ZEROPOINT = $40;
!GPTR = GMEM_FIXED||GMEM_ZEROPOINT
!GHND = GMEM_MOVEABLE||GMEM_ZEROPOINT#使わない
#Global〜系関数
●GlobalAlloc(uFlags,dwBytes) =DLL("kernel32.dll",
"LONG GlobalAlloc(
LONG uFlags, //定数
LONG dwBytes //バイト数
)")
●GlobalFree(hMem) =DLL("kernel32.dll",
"LONG GlobalFree(
LONG hMem
)")
●MoveMemory({参照渡し}des,{参照渡し}src,len) =DLL("kernel32.dll",
"VOID RtlMoveMemory(
POINTER Destination, //移動先
POINTER Source, //移動元
DWORD Length //バイト数
)")●load(h,en)=DLL("aya5.dll",
"BOOL load(
DWORD h,
LONG len
)")
●unload()=DLL("aya5.dll",
"BOOL unload(
)")
●request(h,{参照渡し}len)=DLL("aya5.dll",
"HGLOBAL request(
HGLOBAL h,
INT len
)")栞ロード
「GET SHIORI/3.0
ID: version
Charset: Shift_JIS
SecurityLevel: local
Sender: Nobady{~}{~}」で栞リクエスト
表示
栞アンロード
●栞ロード
リクエストとは文字列
リクエスト数とは整数
メモリとは整数
リクエストはランタイムパス
リクエスト数はバイト数(リクエスト)
エラー監視
メモリはGlobalAlloc(GPTR,リクエスト数+1)
ASSERT(メモリ)
MoveMemory(メモリ,POINTER(リクエスト),リクエスト数+2)
ASSERT(load(メモリ,リクエスト数))
エラーならば
エラーメッセージと言う
それは0●栞アンロード
エラー監視
ASSERT(unload())
エラーならば
エラーメッセージと言う
それは0●栞リクエスト({文字列}Sの|Sで)
メモリとは変数
リクエスト数とは整数
メモリとは変数
エラー監視
リクエスト数はバイト数(S)
メモリはGlobalAlloc(GPTR,リクエスト数+1)
MoveMemory(メモリ,POINTER(S),リクエスト数)
メモリはrequest(メモリ,POINTER(リクエスト数))
ASSERT(メモリ)
Sにリクエスト数を確保
MoveMemory(POINTER(S),メモリ,リクエスト数)
GlobalFree(メモリ)
それはS
エラーならば
GlobalFree(メモリ)
エラーメッセージと言う
それは「」
リクエスト内容を変えればさおりも動かせるはずです