|
うーん、最小サンプルと思しきものを実行してみましたが、文字列は再現されません。
単バイトに収まるもん以外は、段順に4バイトに格納するのではなく、何か数値足す
んでしょうか。
秀丸担当さんの返答に基づくと、以下のようなことを想像すると思うのですが、これ
ではうまくいきません。
wchar_tのバイト列がこう → Outputの引数の際はこう
みたいな最小サンプルで良いのであると助かります。
#include "pch.h"
#include <iostream>
extern "C" __declspec(dllexport) void __cdecl func() {
using PFNOUTPUT = int(_cdecl*)(HWND hwnd, char *);
using PFNGETOUTPUTPANELWINDOWHANDLE = HWND(_cdecl*)(HWND hHidemaru);
PFNOUTPUT pOutputFunc = NULL;
PFNGETOUTPUTPANELWINDOWHANDLE pOutputGetWindowFunc = NULL;
using PFNGETCURRENTWINDOWHANDLE = HWND (WINAPI *)();
PFNGETCURRENTWINDOWHANDLE pGetCurrentWindowHandle = NULL;
// アウトプットパネルのDLLのポインタを確保
HMODULE hHmOutputPaneDLL = LoadLibrary(L"HmOutputPane.dll");
HMODULE hHidemaruExe = LoadLibrary(L"Hidemaru.exe");
if (hHmOutputPaneDLL && hHidemaruExe) {
pGetCurrentWindowHandle = (PFNGETCURRENTWINDOWHANDLE)GetProcAddress
(hHidemaruExe, "Hidemaru_GetCurrentWindowHandle");
pOutputGetWindowFunc = (PFNGETOUTPUTPANELWINDOWHANDLE)GetProcAddress
(hHmOutputPaneDLL, "GetWindowHandle");
// アウトプットペインのOutput関数の取得
// アウトプットペイン自体のウィンドウハンドルの取得。
pOutputFunc = (PFNOUTPUT)GetProcAddress(hHmOutputPaneDLL, "Output");
// wchar_t char[] = "a♫b"; // "61 00 6B 26 62 00" + null(00);
// a♫b 単バイトに収まるものは1つ、そうでないものは4バイトに
unsigned char a[] = { 0x61, 0x6B, 0x26, 0x00, 0x00, 0x62, 0x00 };
HWND hWnd = pGetCurrentWindowHandle();
HWND hOutWnd = pOutputGetWindowFunc(hWnd);
BOOL success = pOutputFunc(hWnd, (char *)a);
}
}
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lp
Reserved )
{
return TRUE;
}
|
|