掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VARIANT型(BSTR)のデータを表示するには? (ID:63097)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
メッセージ内容に全角がうまく表示されません。 ソースはMSDNのヘルプをちょっといじりました。(試行錯誤中) 問題の箇所は//*****ここの全角文字の表示がうまくいきません。 の次のコードです。 参考http http://support.microsoft.com/default.aspx?scid=kb;ja;410837 test.c #include <windows.h> #include <stdlib.h> #include <TCHAR.H> #define APPNAME "test" #define FOOBUFSIZE 1024 __declspec(dllexport) int __stdcall foo(VARIANT *v); __declspec(dllexport) int __stdcall bar(VARIANT *v); __declspec(dllexport) int __stdcall foo(VARIANT *v) { SAFEARRAY *psa = *(v->pparray); wchar_t **ps; static char buf[FOOBUFSIZE]; long i, j, lb, ub; /* VariantのサブタイプとしてArrayかつString以外はエラーにする */ if (v->vt != (VT_ARRAY | VT_BSTR | VT_BYREF)) { #ifdef _DEBUG wsprintf(buf, "VT:%x\n", v->vt); OutputDebugString(buf); #endif return 1; /* 1次元配列以外はエラーにする */ } else if (psa->cDims != 1) { return 1; } SafeArrayLock(psa); ps = psa->pvData; SafeArrayGetLBound(psa, 1, &lb); SafeArrayGetUBound(psa, 1, &ub); for (i = 0, j = lb; j <= ub; i++, j++) { wcstombs(buf, ps[i], FOOBUFSIZE); //*****ここの全角文字の表示がうまくいきません。 MessageBox(NULL, (char *)(wchar_t*)buf, APPNAME, MB_OK); } SafeArrayUnlock(psa); return 0; } __declspec(dllexport) int __stdcall bar(VARIANT *v) { SAFEARRAY *psa = *(v->pparray); wchar_t **ps; int lb, ub; if (v->vt != (VT_ARRAY | VT_BSTR | VT_BYREF)) return 1; if (psa->cDims != 1) return 1; SafeArrayLock(psa); ps = psa->pvData; SafeArrayGetLBound(psa, 1, &lb); SafeArrayGetUBound(psa, 1, &ub); if (ub - lb >= 1) { SysFreeString(ps[1]); ps[1] = SysAllocString(L"変換しました。END"); } SafeArrayUnlock(psa); return 0; } test.def LIBRARY test EXPORTS foo bar VBのフォーム内容 Option Explicit Private Declare Function foo Lib "test.dll" (v As Variant) As Long Private Declare Function bar Lib "test.dll" (v As Variant) As Long Private Sub Command1_Click() Dim s(2) As String s(0) = "Hello こんにちは" s(1) = "Visual Basic " s(2) = "world! だね" foo s bar s Print s(0) & s(1) & s(2) End Sub 以上、よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.