こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

OCXのメソッドの引数に文字列を返したい

こんにちは。いつもお世話になっております。
早速ですが質問させて下さい。

VisualC++のClassWizardにて作成したメソッドの引数に文字列を返したいのですがどうすればよいでしょうか。

例えば、「test.ocx」というOCXにGetFileNameというメソッドを追加したとします。

---<GetFileName>---
UINT GetFileName(
LPCTSTR FilePath, //ファイルフルパス
LPCTSTR FileName //ファイル名
)
-------------------

---<VBからの呼び出し>---
FilePath = "C:\Program Files\test.txt"
ret = obj.GetFileName(FilePath, FileName)
'ここでFileNameに値を返したい
------------------------

ここでFileNameにOCXから値を返すようにしたいのですが、型(ClassWizardパラメータリストの「タイプ」)は何になるのでしょうか。

数値を返す場合は、「long*」でできたのですが、
文字列を返す方法が分かりません。(「LPCTSTR*」というのもないですし)

どうかご教示下さい。

<環境>
Windows 2000, Visual C++ 6.0, Visual Basic 6.0

投稿日時 - 2006-10-03 22:56:54

QNo.2449332

困ってます

質問者が選んだベストアンサー

>タイプで「BSTR*」としたところ、「LPCTSTRとは型が違う」とコンパイルエラーが発生してしまいました。

NULL終端文字列はサイズの情報が入ってないので、COMではそのまま渡せないです。BSTRとかVARIANTでラップすればOK。

BSTR渡し
_bstr_t ret = _bstr_t(_T("abc"));
return ret;

確認してませんが、BSTR*渡しのときは
return &ret;
としてもうまくいかないかもしれない。
(参照渡し後の_bstr_tインスタンス消滅?)

投稿日時 - 2006-10-12 14:25:30

お礼

saitohaさん、回答ありがとうございます。
(返信が遅くなり申し訳ありません。)

「_bstr_t」でうまく動作しました。
本当にありがとうございました。

投稿日時 - 2006-10-27 19:09:19

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

BSTRだとおもいます。
参照コピーでふつうに渡すとメモリリークするかも...

投稿日時 - 2006-10-05 15:57:09

補足

saitohaさん、回答ありがとうございます。
(返信が遅くなり申し訳ありません。)

>BSTR
タイプで「BSTR*」としたところ、「LPCTSTRとは型が違う」とコンパイルエラーが発生してしまいました。
(short long型として扱われているようです。)
何かアドバイスありましたらよろしくお願いします。

投稿日時 - 2006-10-11 19:55:19

あなたにオススメの質問