共有メモリについて – プログラミング – Home

通知
すべてクリア

[解決済] 共有メモリについて


T.T
 T.T
(@T.T)
ゲスト
結合: 19年前
投稿: 20
Topic starter  

お世話になります。
.NET6.0 WindowsXP JBuilderで作成しております。

今テストプログラムで
java→DLL→C
で文字列を渡すテストをしてます。

現象:
java→DLL→javaなら文字列の受け渡しが正常
java→DLL→CだとNGです。
もらっている文字が"となっています。

以下にDLLのソースを記述します。
// JNIEXE.cpp : DLL アプリケーションのエントリ ポイントを定義します。
//

//#include <jni.h>
//#include stdafx.h
#include JNIProc.h
#include <stdlib.h>
#include <windows.h>
#include <ShellAPI.h>
#pragma comment(lib, shell32.lib)
#pragma data_seg(test)
char szSJIS[100];
#pragma data_seg()

char* __declspec(dllimport) __stdcall getStr();
char sz[100];

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

JNIEXPORT void JNICALL Java_jnitest_JNIProc_sSetMessage
(JNIEnv *env, jclass, jstring message)
{
jsize nUniLength = env->GetStringLength(message);
const jchar* pszUnicode = env->GetStringChars(message, NULL);
::memset((void*)szSJIS, 0, sizeof(szSJIS));

WideCharToMultiByte(
CP_ACP,
0, //WC_SEPCHARS,
pszUnicode,
nUniLength,
szSJIS,
sizeof(szSJIS),
NULL,
NULL
);

env->ReleaseStringChars(message, pszUnicode);

}

JNIEXPORT jstring JNICALL Java_jnitest_JNIProc_sGetMessage
(JNIEnv *env, jclass)
{
WCHAR szWide[100];
::memset((void*)szWide, 0, sizeof(szWide));

int nWideLength = MultiByteToWideChar(

CP_ACP,

MB_PRECOMPOSED,

szSJIS,

strlen(szSJIS),

szWide,

sizeof(szWide) );

return env->NewString(szWide, nWideLength);

}

char* __declspec(dllexport) __stdcall getStr(){

strcpy(sz,szSJIS);
return sz;

}

原因がわかりません。経験のある方よろしくご教授願います。


引用未解決
トピックタグ
T.T
 T.T
(@T.T)
ゲスト
結合: 19年前
投稿: 20
Topic starter  

ファイルマッピングオブジェクトをしようすればいいことがわかりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました