VC製COMクライアントからVB製COMサーバーで日本語が取得できない

[戻る]
ダイ 2002/07/26(金) 19:06:00
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;
}

ダイ 2002/07/26(金) 19:08:00
すみません・・・二重投稿になってしまいました・・・
こちらを本スレでおねがいいたします。

管理人さん申し訳ありません。

ダイ 2002/07/26(金) 19:09:37
あと、訂正です。

誤>(4)ASPからの(2)のメモリ表示
正>(4)ASPからの(1)のメモリ表示

ダイ 2002/07/29(月) 10:48:46
[[解決]]
自己レス。

atlbase.hをincludeして、USES_CONVERSIONマクロを宣言。
OLE変換マクロを利用し、無事表示が可能となりました。
COMで値を取得するだけ取得して、変換を行っていなかったようです。
お手数お掛けいたしました。

古いスレッドには追加発言できません。