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

VC製COMクライアントからVB製CO...
 
通知
すべてクリア

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


ダイ
 ダイ
(@ダイ)
ゲスト
結合: 23年前
投稿: 16
Topic starter  

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;
}


引用未解決
トピックタグ
ダイ
 ダイ
(@ダイ)
ゲスト
結合: 23年前
投稿: 16
Topic starter  

すみません・・・二重投稿になってしまいました・・・
こちらを本スレでおねがいいたします。

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


返信引用
ダイ
 ダイ
(@ダイ)
ゲスト
結合: 23年前
投稿: 16
Topic starter  

あと、訂正です。

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


返信引用
ダイ
 ダイ
(@ダイ)
ゲスト
結合: 23年前
投稿: 16
Topic starter  

自己レス。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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