SHCreateStreamOnFileでコンパイルエラー – プログラミング – Home

通知
すべてクリア

[解決済] SHCreateStreamOnFileでコンパイルエラー


mac
 mac
(@mac)
ゲスト
結合: 22年前
投稿: 37
Topic starter  

いつも参考にさせていただいております、macと申します。

早速質問ですが、msxml4.dllを用いて、XMLファイルを出力する
アプリケーションを作成しております。
XMLファイルを出力する際、IStreamPrtを用いて
以下のように出力しようと考えております。

IStreamPtr pStream;

SHCreateStreamOnFile(C:\\output.xml,
STGM_READWRITE | STGM_SHARE_DENY_WRITE | STGM_CREATE,
&pStream);

IMXWriterPtr pWriter;
:
pWriter->put_output(_variant_t((IUnknown*)(IUnknownPtr)pStream));

そこで、SHCreateStreamOnFileを用いてIStreamPtrを取得したいのですが、
「'SHCreateStreamOnFile' : 定義されていない識別子です。」
というコンパイルエラーが返ってきてしまいます。

ウェブ上でいろいろ調べて、関数「SHCreateStreamOnFile」を
使用するために「shlwapi.h」をincludeするまでは分かったのですが
#include <shlwapi.h>と記載しても、プロジェクトの設定ダイアログから
インクルードしても、結果は変わりませんでした。

どのように設定すれば良いのでしょうか?
どなたかご教授お願いいたします。

開発環境
Windows XP
VC++ 6.0


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

どうも、VC6のshlwapi.hではSHCreateStreamOnFileの関数宣言がないっぽいです。
(VC6SP6 Enterで確認)

しかしながら、shlwapi.dll にはちゃんとSHCreateStreamOnFileA(W)が定義されていま
すので、面倒ですがLoadLibrary+GetProcAddressで対応するとか。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

こんなサイト見つけた。

ファイルからストリーム(IStream)を作成
http://www.wac-jp.com/programmers/win32/SHCreateStreamOnFile.html
※SHCreateStreamOnFileと同等の関数を自作する関数

多分、VC6対応の一番最終の Platform SDKを入れれば、このような面倒なことはしなく
てもよさそう。どれをどのようにインストールするかはよくわかりませんし、必ず
SHCreateStreamOnFileが対応しているとも言い切れませんので。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> 面倒ですがLoadLibrary+GetProcAddressで対応するとか。
一応試してみました。うまく動いてはいるようです。

(try句)

IStreamPtr pStream;
HMODULE hDll=LoadLibrary(TEXT(shlwapi.dll));
if (hDll!=NULL)
{
// WINAPIは必要ないかも。
typedef HRESULT (WINAPI *SHCREATESTREAMONFILE)(LPCSTR,DWORD,IStream**);

SHCREATESTREAMONFILE pSHCreateStreamOnFile;
// ~A の方を取得
pSHCreateStreamOnFile=
(SHCREATESTREAMONFILE)GetProcAddress(hDll,TEXT(SHCreateStreamOnFileA));
hr=pSHCreateStreamOnFile(test.xml,
STGM_READWRITE|STGM_SHARE_DENY_WRITE|STGM_CREATE,
&pStream);
FreeLibrary(hDll);
}
else
{
// 適当
hr=S_FALSE;
}
// エラーをスロー
if (FAILED(hr)) _com_issue_error(hr);


返信引用
mac
 mac
(@mac)
ゲスト
結合: 22年前
投稿: 37
Topic starter  

Blue様、回答ありがとうございます。

Blue様にの上記サンプルを参考に作成した結果、問題なくファイルを
出力できました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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