アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

A 回答 (2件)

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



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

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

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

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

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

お礼日時:2006/10/27 19:09

BSTRだとおもいます。


参照コピーでふつうに渡すとメモリリークするかも...

この回答への補足

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

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

補足日時:2006/10/11 19:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!