COM関連のプログラミングでコマっています。
(1)VB製COMサーバー(ActiveX)
(2)VC製COMクライアント
(3)VB製COMクライアント
(4)ASPからの(2)のメモリ表示
(1)のVB製のCOMサーバーでメモリを共有し、VC・VB・ASPのそれぞれのアプリから
メモリを利用しようとしています。
ここ数日苦戦した結果、(3)(4)からの(1)へのメモリアクセスは旨くいきました。
しかし、最後の最後(2)のVCのCOMクライアントからのメモリアクセスを行い、値の取得を
行う際に、表題のような問題が発生して悩んでいます。
具体的にいうと、ひらがな・漢字・カタカナを含む日本語の値が現在のテスト用のコンソール
アプリに表示されないのです。
表示にはprintf関数を使い、取得した値を文字列の形式で出力しています。
(printf(%S\n, hoge)というような具合に)
値が何も入らない場合には(null)が表示されるはずなので、値の取得自体はできています。
(printf関すのtypeオプションを文字列以外に設定すると何らかの値が表示されます)
どなたかよきアドバイスを・・・
以下ソース。
-----------------------------------------------------------------
#include stdio.h
//ActiveX.EXEから必要な定義ファイルを生成する
#import prjMemoryShare.exe no_namespace named_guids raw_interfaces_only
// メイン処理
int main(int argc, char* argv[])
{
HRESULT hResult; // COM 戻り値用変数
_Class1* pClass1; // COMインターフェイスポインタ
// COMの初期化
::CoInitialize(0);
// インスタンスの作成(CLSIDとIIDを指定して、ポインタ pClass0 を取得)
hResult = ::CoCreateInstance((REFCLSID) CLSID_Class1, 0, CLSCTX_ALL,
(REFIID) IID__Class1, (LPVOID*)&pClass1);
if( ! SUCCEEDED(hResult) ) {
printf(ERROR occured = %08x\n, hResult);
return 0;
}
// メソッドの呼び出し
BSTR z = 0;
pClass1->get_Share( &z );
printf(Result = %S\n ,z );
// 終了処理
pClass1->Release();
// COMの終了処理
::CoUninitialize();
return 0;
}
すみません・・・二重投稿になってしまいました・・・
こちらを本スレでおねがいいたします。
管理人さん申し訳ありません。
あと、訂正です。
誤>(4)ASPからの(2)のメモリ表示
正>(4)ASPからの(1)のメモリ表示
自己レス。
atlbase.hをincludeして、USES_CONVERSIONマクロを宣言。
OLE変換マクロを利用し、無事表示が可能となりました。
COMで値を取得するだけ取得して、変換を行っていなかったようです。
お手数お掛けいたしました。